从C ++中的成员函数中获取指向成员函数的指针

时间:2010-12-26 07:49:07

标签: c++

目前在我尝试编写的程序中,我需要能够在同一个类的成员函数中获取指向成员函数的指针。指针需要作为void(*)()传递给函数。示例:

//CallFunc takes a void (*)() argument           
class testClass {        
public:   
    void aFunc2;   
    void aFunc1;  
}  
void testClass:aFunc2(){  
    callFunc(this.*aFunc1); // How should this be done?  
}  
void testClass:aFunc1(){  
    int someVariable = 1;  
}

我正在尝试在GCC 4.0.1中执行此操作。此外,被调用的成员函数不能是静态的,因为它引用了它所属的类中的非静态变量。 (如果你想知道,我需要的具体实例是我需要能够将类的成员函数传递给GLUT函数glutDisplayFunc())

2 个答案:

答案 0 :(得分:0)

我曾经读过这篇文章并发现它非常有趣:

http://www.codeproject.com/KB/cpp/FastDelegate.aspx

此外,有关指向成员函数的指针的常见问题,请阅读:

http://www.parashift.com/c++-faq-lite/pointers-to-members.html

答案 1 :(得分:0)

要获取指向成员函数的指针,您需要以下语法:

callFunc(&testClass::aFunc1); 

但请注意,要调用成员函数,您需要具有类实例。所以callFunc需要2个参数(我正在使用模板,但你可以将它改为testClass):

template <class T> 
void callFunc(T*inst, void (T::*member)())
{
    (inst->*member)();
}

所以callFunc的正确调用如下:

void testClass::aFunc2()
{
    callFunc(this, &testClass::aFunc1); 
}