我有以下问题: 我必须使用预定义函数,它需要引用函数来调用它。
假设我有一个带参数的函数:
void MyClass::UnitFunction(Unit* unit)
{
predefinedFunction(.... , &MyClass::UnitFunction(unit), ...... );
}
当我编译这个时,我得到以下错误:'&' requires l-value
我实际上不知道如何解决这个问题。
答案 0 :(得分:0)
这就是仿函数可以派上用场的情况。我建议你阅读一些关于它们的内容,当你掌握它们时,你可能会重新考虑你当前的所有代码设计,结果可能就是那些函子正是你所寻求的。基本上,仿函数是一个运算符()重载的类。您可以将这样的对象视为一个函数,但它也可以将自己的状态和其他附加数据保存在内部(因为它仍然是一个类对象)。
class myFunctor
{
int state;
//other additional data you might need
myFunctor(int _state)
{
state = _state;
}
int operator()(int a, int b)
{
if(state == 0)
return a + b;
else if(state == 1)
//do sth else
...
}
};
然后你可以使用像休闲对象这样的仿函数:
myFunctor obj(0); //initialization
int a = 1, b = 2;
obj(1, 2); // calling a functor
&obj; // address of the functor, which could be used to call a function somewhere else in the code
编辑:
在你的情况下,你可以返回"这个"在你的仿函数重载的operator()中然后你可以将参数传递给仿函数并仍然将仿函数的地址传递给另一个函数