繁体   English   中英

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

[英]Passing pointer to any member function as class template argument

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;
}

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

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

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

模板函数可以帮助您减少参数推断:

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);

生活

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM