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

+ Recent posts