将指针传递给任何成员函数作为类模板参数

时间:2015-10-10 02:43:35

标签: c++ templates

template<typename T, typename M, M Method>
class ProxyObject
{
public:

    template<typename... Args>
    void Invoke (T& Object, _In_ Args&&... A)
    {
        (void)(Object.*Method)(std::forward<Args>(A)...);
    }
};

class Object
{
public:

    int MyMethod (int Val)
    {
        wcout << L"Hello!" << endl;
        return Val;
    }
};


int wmain ()
{
    Object myObj;
    ProxyObject<Object, decltype(&Object::MyMethod), &Object::MyMethod> obj;

    obj.Invoke(myObj, 10);

    return 0;
}

decltype(&Object::MyMethod)的定义中,obj似乎是多余的。有没有办法让ProxyObject自动推断传递的指针到成员函数的类型,这样我就可以按如下方式定义obj

ProxyObject<Object, &Object::MyMethod> obj;

1 个答案:

答案 0 :(得分:2)

我认为类模板是不可能的,因为你必须明确指定成员函数类型。

模板函数可以帮助您完成参数推断:

template<typename T, typename M, typename... Args>
void invoke (T& Object, M Method, Args&&... A)
{
    (void)(Object.*Method)(std::forward<Args>(A)...);
}

然后

invoke(myObj, &Object::MyMethod, 10);

LIVE