更新我意识到这个问题缺少适当的MCVE,这需要我花一些时间来提出。抱歉,我将在有时间时再更新它。到目前为止,我感谢您的回答。
在this answer regarding static functions之后:
声明(在MyClass
中)
void MyClass::func ( void (MyOtherClass::*f)(int) ); //Use of undeclared identifier 'MyOtherClass'
函数传递给func的示例:
void MyOtherClass::print ( int x ) {
printf("%d\n", x);
}
函数调用(在MyOtherClass
中)
void MyOtherClass::loop(){
func(&MyOtherClass::print);
}
如何将成员函数作为另一个类的成员函数的参数传递?
答案 0 :(得分:0)
根据ISO,答案是"don't".与普通函数不同,没有类的实例,非静态成员函数是没有意义的。解决方法是,您可以让调用函数使用std::function
并将其传递给lambda。
示例:
void calling_func(std::function<void()> f);
struct foo
{
void func();
void call()
{
calling_func([this]{
func();
});
}
};
答案 1 :(得分:0)
您不能只使用std::function
和std::bind
吗?
class MyOtherClass
{
public:
MyOtherClass() {}
void print(int x)
{
printf("%d\n", x);
}
};
class MyClass
{
private:
std::function<void()> CallbackFunc;
public:
MyClass() {};
void AssignFunction(std::function<void(int)> callback, int val)
{
CallbackFunc = std::bind(callback, val); //bind it again so that callback function gets the integer.
}
void DoCallback()
{
CallbackFunc(); //we can then just call the callback .this will, call myOtherClass::print(4)
}
};
int main()
{
MyClass myObject;
MyOtherClass myOtherObject;
int printval = 4;
//assign the myObject.callbackfunc with the myOtherClass::print()
myObject.AssignFunction(std::bind(&MyOtherClass::print, myOtherObject,std::placeholders::_1), 4);
//calling the doCallback. which calls the assigned function.
myObject.DoCallback();
return 0;
}