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;发布于 2015-10-10 03:09:36
我认为类模板是不可能的,因为您必须显式地指定成员函数类型。
模板函数可以帮助您进行参数推导:
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);活着
https://stackoverflow.com/questions/33049706
复制相似问题