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