所以我试图在C ++中的两个类之间传递函数作为参数:
void class1::func_1(QString str)
{
class2* r = new class2();
r->func_2(str, &process);
}
void class1::process(QString str)
{
//Do something with str
}
'r-> func_2'如下所示:
QString class2::func_2(QString str, void (*callback)(QString))
{
//Do something else
}
但是,当我尝试编译时,出现以下错误:
must explicitly qualify name of member function when taking its address
r->func_2(str, &process);
^~~~~~~~
class1::
cannot initialize a parameter of type 'void (*)(QString)' with an rvalue of type 'void (class1::*)(QString)'
r->func_2(str, &process);
^~~~~~~~
而且我不知道为什么。有任何想法吗?我显然做错了什么...只是不确定。任何帮助将不胜感激。谢谢!
传递成员地址时,您需要完全限定成员函数名称:
void class1::func_1(QString str)
{
class2* r = new class2();
r->func_2(str, &class1::process);
}
这些函数是成员函数,它们不是静态的。我建议您使用std :: function和std :: bind。通过这些,您将能够将函数作为参数。请记住,当您将使用std :: bind传递参数时,它不是静态/全局函数,而是某个对象的成员,则还需要使用称为放置的东西。查一下您无需使用lambda。
class A
{
std::string m_name;
void DisplayName() { std::cout << m_name };
}
void TakeFunctionAsArgument(std::function<void(void)> func)
{
func();
}
int main()
{
A objectA;
TakeFunctionAsArgument(std::bind(&A::DisplayName, objectA));
return 0;
}