1. 기본 개념
객체의 멤버 함수를 함수 포인터로 전달하려면:
- 객체의 포인터 (this 같은 것)를 함께 전달해야 한다.
- 멤버 함수 포인터를 호출할 때는 (*객체).*함수포인터() 또는 객체->*함수포인터() 형태를 사용해야 한다.
예제 코드
#include <iostream>
// 예제 클래스
class MyClass {
public:
void SayHello() {
std::cout << "Hello, world!" << std::endl;
}
void SayNumber(int num) {
std::cout << "Number: " << num << std::endl;
}
};
// 멤버 함수 포인터를 받아서 호출하는 함수
void CallMemberFunction(MyClass* obj, void (MyClass::*func)()) {
if (obj && func) {
(obj->*func)(); // 객체를 통해 멤버 함수 호출
}
}
// 매개변수가 있는 멤버 함수 포인터 호출 (C++11 이상)
void CallMemberFunctionWithArg(MyClass* obj, void (MyClass::*func)(int), int value) {
if (obj && func) {
(obj->*func)(value);
}
}
int main() {
MyClass myObj;
// 멤버 함수 포인터 설정
void (MyClass::*helloFunc)() = &MyClass::SayHello;
void (MyClass::*numberFunc)(int) = &MyClass::SayNumber;
// 멤버 함수 호출
CallMemberFunction(&myObj, helloFunc);
CallMemberFunctionWithArg(&myObj, numberFunc, 42);
return 0;
}
실행 결과
Hello, world!
Number: 42
'공부 > C\C++' 카테고리의 다른 글
| c 매크로 - ## (토큰 결합 연산자) (0) | 2025.06.28 |
|---|---|
| typeid 키워드 (0) | 2025.06.28 |
| c extern 키워드 (with 선언과 정의) (0) | 2025.06.24 |
| std::atomic<T>::compare_exchange_weak (0) | 2025.06.14 |
| std::move (0) | 2025.06.11 |