C++에서 함수 포인터와 객체의 bind
개요
함수 포인터. 이건 C에도 존재하는 고대 기술입니다.
말 그대로 함수를 가르키는 놈이에요.
일반 포인터가 그 주소에 있는 값에 마음대로 접근할 수 있듯이 함수 포인터도 그 함수를 실행시킬 수 있습니다.
안타깝게도 함수 내부를 뜯어 고치는건 불가능하지만요.
이 함수 포인터가 가르킬 수 있는건 진짜 모든 함수입니다.
단순한 전역 함수부터 정적 함수, 클래스 내부에 존재하는 멤버 함수까지요.
근데 이 클래스 내부에 존재하는 멤버 함수는 대체 어떻게 가르키고 있길래 얘를 실행할 수 있는걸까요?
바인딩
사실 저도 모릅니다! 근데 추측은 해볼 수 있죠.
기본적으로 클래스는 함수를 가지고 있지 않습니다.
그러니까 멤버함수는 객체와 바인딩 되어있지 않아요.
일반 정적 함수나 전역 함수처럼 저 메모리 공간 어딘가를 둥둥 떠다닙니다.
그리고 이 함수들이 실행될땐 암묵적으로 첫번째 매개변수로 객체를 넘겨주는 겁니다.
멤버 변수들은 모두 this 포인터를 통해 접근되는것이죠.
이걸 통해서 살짝의 응용을 해줄 수 있어요.
어떠한 객체 A가 있고 멤버함수가 있는데 내가 A배열 내부에서 주체만 바꿔서 특정 멤버 함수를 그냥 쭉 실행시키고 싶다면 해당 함수 포인터를 저장한다음에 std::bind라는 함수를 통해서 객체와 함수를 순서대로 바인딩 해서 실행시켜주면 됩니다.
물론 이럴 빠에 그냥 실행하고 말겠지만 조금 더 확장성 있게 내가 직접 함수를 지정해주고 싶을수도 있잖아요? 그때 사용하는겁니다.
대체 언제 쓰나 싶겠지만 전 실제로 사용중입니다.
이런식으로 함수 포인터를 전달해서

이런식으로 객체를 싹 뒤져가며 bind 시키고 실행 시키는거죠.

그냥 갑자기 보이길래 뻘글 하나 썼어요.
잏잏잏 << 이거 폰트 잘깨지네요.