首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将指向任何成员函数的指针作为类模板参数传递

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

Stack Overflow用户
提问于 2015-10-10 02:43:34
回答 1查看 529关注 0票数 3
代码语言:javascript
复制
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

代码语言:javascript
复制
ProxyObject<Object, &Object::MyMethod> obj;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 03:09:36

我认为类模板是不可能的,因为您必须显式地指定成员函数类型。

模板函数可以帮助您进行参数推导:

代码语言:javascript
复制
template<typename T, typename M, typename... Args>
void invoke (T& Object, M Method, Args&&... A)
{
    (void)(Object.*Method)(std::forward<Args>(A)...);
}

然后

代码语言:javascript
复制
invoke(myObj, &Object::MyMethod, 10);

活着

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33049706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档