使用成员函数作为函数指针
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) );
}
我以前从未使用过函数指针,我在让我的代码工作时遇到了一些问题。这就是我的
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) );
}