C++/C++
멤버 함수 포인터(Member Function Pointer)
Elan
2022. 2. 11. 19:23
다소 생소한 문법인 멤버 함수 포인터에 대해 알아보자.(추가로 멤버
자주 사용되지 않는 문법이라 잊어버리거나 모를 수도 있다.
class A {
public:
void Test(){
std::cout << "A::Test()\n";
}
static void TestStatic() {
std::cout << "A::TestStatic()\n";
}
int t;
};
class B {
public:
void Test() {
std::cout << "B::Test()\n";
}
static void TestStatic() {
std::cout << "B::TestStatic()\n";
}
};
void (A::*mem_func_ptr)() = &A::Test; // Member function pointer는 해당 class의 멤버만 가리킬 수 있다. ( 참조기호 &를 안붙여도 상관 없음 )
int(A::* mem_ptr) = &A::t; // Member variable pointer는 해당 타입과 일치하는 멤버 변수만 가리킬 수 있다.
void (*mem_func_ptr2)() = &A::TestStatic; // static 함수는 전역 함수가 같이 취급하기 때문에 멤버 함수 포인터를 사용하지 않는다.
void Test() { std::cout << "Test()\n"; }
void (*func_ptr)() = Test;
//void (A::*pt4)() = Test; // Error : 멤버 함수 포인터는 전역 함수를 가리킬 수 없다
int main() {
A a=A(); // 멤버 함수 포인터를 사용하기 위해 인스턴스 생성
(a.*mem_func_ptr)(); // 일반 함수포인터와 달리 호출을 위해서는 객체의 인스턴스가 필요하다
(a.*mem_ptr) = 10; // 멤버 변수 포인터를 이용하여 10 할당
std::cout << a.t << std::endl;
func_ptr(); // 일반 함수 포인터 호출
mem_func_ptr2(); // static 함수는 멤버 함수가 아닌 전역 변수로 친다.
}