멤버 함수 포인터는 기존 함수 포인터와 같이 함수를 가리키는데, 클래스의 멤버 함수를 가리킨다는 점이 다르다.
#include <iostream>
using namespace std;
class Person {
public:
void print(int i) {
cout << i << endl;
}
};
int main() {
void (Person:: * fn)(int) = &Person::print; // this를 넘기지 못함
Person person;
(person.*fn)(1);
}
멤버 함수 선언은 위처럼 하게되며 표현함에 있어 난해한 부분이 있어 다른 형태로 바꿔 쓸 수 있다.
typedef void (Person::* funcType)(int);
// using funcType = void (Person::*)(int); 사용가능
funcType fn = &Person::print;
Person person;
(person.*fn)(1);
#include <functional>
function<void(Person*, int)> func = &Person::print;
Person person;
func(&person, 1);
예외 적으로 static 함수는 일반 함수 포인터처럼 선언이 가능하다.
void (\*fn)(int) = Person::print;
fn(1)