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

Use member function as function pointer

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

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);
}

这给我错误

"nonstandard form for taking the address of a member function

我试图在 *funcPtr 前面添加 TestClass:: ,但这给了我更多的错误

有了成员函数指针,应该是这样的:

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,它们提供更好的可读性和更多检查

http://en.cppreference.com/w/cpp/utility/functional/bind

#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) );
}