我希望能够使用某种功能模板在类外调用成员函数(例如,类doSomething()
中的testClass
)。简而言之,能够以这种方式调用非静态成员函数,functionCaller(t.doSomething)
来自main()
。
说我有一个C ++类,如:
class testClass {
public:
testClass()
{
value = 0;
}
int prod(int i)
{
value *= i;
return value;
}
int doSomething()
{
value = prod(10);
return value;
}
private:
int value;
};
我的功能模板如下所示:
template<typename T, typename ret>
ret callFunction(T t, ret (T::*func)()) {
// checkSomePermissionsHere()
return t.func()
}
如果我尝试以下列方式使用此模板:
int main()
{
testClass t1;
callFunction(t1, &testClass::doSomething);
return 0;
}
我收到此错误:
error: no member named 'func' in 'testClass'
return t.func(a);
^
通过doSomething
方法在对象t1
上调用此成员函数(callFunction
)的正确方法是什么?我想实现callFunction
作为一般API的一部分,它在执行提供的功能之前进行一些检查。
我正在为我的编译器使用clang / LLVM 3.5。
答案 0 :(得分:3)
改变这个:
webservice
到此:
return t.func()
它应该编译并执行正常。
正如Joachim Pileborg所说,你可以使用std::function和std::bind。在这种情况下,您的代码可能如下所示:
return (t.*func)();
上面的代码基于此answer。