使用功能模板调用C ++类成员函数

时间:2015-08-07 09:39:07

标签: c++ templates c++11

我希望能够使用某种功能模板在类外调用成员函数(例如,类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。

1 个答案:

答案 0 :(得分:3)

改变这个:

webservice

到此:

return t.func()

它应该编译并执行正常。

正如Joachim Pileborg所说,你可以使用std::functionstd::bind。在这种情况下,您的代码可能如下所示:

return (t.*func)();

上面的代码基于此answer