C++ 使用成员函数作为函数指针

C++ 使用成员函数作为函数指针,c++,member-function-pointers,C++,Member Function Pointers,我以前从未使用过函数指针,而且在让代码正常工作时遇到了一些问题。这就是我所拥有的 TestClass.h: class TestClass { public: void function1(); void function2(); void function3(void (*funcPtr)(void)) void function4(); }; TestClass.cpp void TestClass::functio

我以前从未使用过函数指针,而且在让代码正常工作时遇到了一些问题。这就是我所拥有的

TestClass.h:

class TestClass
{
    public:
        void function1();
        void function2();

        void function3(void (*funcPtr)(void))
        void function4();
};
TestClass.cpp

void TestClass::function1()
{
    //CODE
}

void TestClass::function2()
{
    //CODE
}

void TestClass::function3(void (*funcPtr)(void))
{
    //CODE
    funcPtr();
    //CODE
}

void TestClass::function4()
{
    function3(function1);
    function3(function2);
}
这给了我错误

“获取成员函数地址的非标准形式


我试图在*funcPtr前面添加TestClass::infort,但这给了我更多关于成员函数指针的错误,应该是这样的:

void TestClass::function3(void (TestClass::*funcPtr)())
{
    //CODE
    (this->*funcPtr)();
    //CODE
}

void TestClass::function4();
{
    function3(&TestClass::function1);
    function3(&TestClass::function2);
}
带函数指针

class TestClass
{
    public:
        static void function1(); // static added
        static void function2(); // static added

        void function3(void (*funcPtr)(void))
        void function4();
};

void TestClass::function3(void (*funcPtr)())
{
    //CODE
    funcPtr();
    //CODE
}

void TestClass::function4();
{
    function3(&TestClass::function1);
    function3(&TestClass::function2);
}

我建议您使用std::bind和std::function,它们为您提供了更好的可读性和更多的检查

#包括
void TestClass::function3(std::function funcPtr)
{
//代码
funcPtr();
//代码
}
void TestClass::function4()
{
function3(std::bind(&TestClass::function1,this));
function3(std::bind(&TestClass::function2,this));
}

非静态成员函数不是函数-您不能调用成员函数。相反,您必须在对象上调用它。您需要:
void f(TestClass*obj,void(TestClass:*mf)(){(obj->*mf)(;}
并像
f(this,&TestClass::function1)那样调用它目前使用嵌入式系统,无法访问C++的更新版本。
#include <functional>

void TestClass::function3( std::function<void (void)> funcPtr )
{
    //CODE
    funcPtr();
    //CODE
}

void TestClass::function4()
{
    function3( std::bind(&TestClass::function1, this) );
    function3( std::bind(&TestClass::function2, this) );
}