c++ 함수포인터 질문이요

zooloo의 이미지

class tmp
{
 void tmp1();
 void tmp1(int);
};

함수포인터 변수 두개를 선언하고 위 클래스의 멤버함수
tmp::tmp1() 과 tmp::tmp1(int) 각각 대입하고 싶은데
이런경우 어떻게 해야 하는지 아시는분 계신가요?

jick의 이미지

C++ 멤버 함수는 일반 함수 포인터로 가리킬 수 없고 그 클래스 전용 "멤버 함수 포인터"를 써야 합니다.

구글에서 "pointer to member function"으로 찾아보세요.

http://en.cppreference.com/w/cpp/language/pointer (밑에서 두번째쯤에 member function pointer가 나옵니다.)

zooloo의 이미지

이름이 같은 멤버 함수에 포인터를 어떻게 대입시키느냐는 질문이였습니다

jick의 이미지

http://en.cppreference.com/w/cpp/language/overloaded_address 에 따르면, 그냥 하면 알아서 맞는 함수를 찾아주는 것 같습니다.

#include <stdio.h>
 
class C {
  public:
    void f() { printf("void fn\n"); }
    void f(int d) { printf("int fn(%d)\n", d); }
};
 
int main()
{
    void (C::*ptr1)() = &C::f;
    void (C::*ptr2)(int) = &C::f;
 
    C c;
 
    (c.*ptr1)();
    (c.*ptr2)(5);
 
    return 0;
}
 
결과:
void fn
int fn(5)
zooloo의 이미지

고맙습니다
해결되었습니다