gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:39:25 25 4
gpt4 key购买 nike

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;

最佳答案

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

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

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

关于c++ - 将指针作为类模板参数传递给任何成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com