C++ 클래스 - 멤버 함수 포인터

진경천·2023년 9월 20일
0

C++

목록 보기
43/90

멤버 함수 포인터는 기존 함수 포인터와 같이 함수를 가리키는데, 클래스의 멤버 함수를 가리킨다는 점이 다르다.

#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, using
typedef void (Person::* funcType)(int);
// using funcType = void (Person::*)(int); 사용가능
funcType fn = &Person::print;

Person person;
(person.*fn)(1);
  • functional 헤더 이용
#include <functional>

function<void(Person*, int)> func = &Person::print;

Person person;
func(&person, 1);

예외 적으로 static 함수는 일반 함수 포인터처럼 선언이 가능하다.

void (\*fn)(int) = Person::print;
fn(1)
profile
어중이떠중이

0개의 댓글