我正在尝试将成员函数传递给嵌套类中的另一个函数。
传递非成员函数效果很好但传递成员不会编译:
A.H:的class A
{
class B
{
B();
~B();
doSomething();
};
class C
{
C();
~C();
execute(function<void(void)> func);
};
C *myC;
map<int, B> myMap;
}
A.cpp:的
void A::member(int param)
{
A::myMap[param].doSomething();
}
void nonA_func(int param)
{
...
}
void A::caller()
{
myC->execute(bind(nonA_func, 42)); // OK
myC->execute(bind(A::member, 42)); // COMPILER ERROR 1
myC->execute(A::myMap[42].doSomething()); // COMPILER ERROR 2
}
A::main()
{
myC = new A::C();
// filling myMap
caller();
myMap.clear();
delete C;
}
编译以下COMPILER ERROR 1
时:
error: invalid use of non-static member function myC->execute(bind(A::member, 42)); ^
实际上将A::member
定义为static
可以解决此问题,但之后我再也无法访问myMap
了。
如何绑定非静态成员函数?
我还尝试直接传递被调用的函数,从而产生COMPILER ERROR 2
:
invalid use of void expression myC->execute(A::myMap[42].doSomething()); ^
答案 0 :(得分:4)
您需要将this
指针传递给bind
(或lambda)。如果没有实例,则无法使用实例变量/函数。
myC->execute(bind(&A::member, this, 42));
myC->execute([this]{ member(42); });