C++ 使用成员函数作为函数指针
我以前从未使用过函数指针,而且在让代码正常工作时遇到了一些问题。这就是我所拥有的 TestClass.h: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
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) );
}