我想使用指向成员函数指针和参数包的指针调用函数。下面给出代码:使用参数包推导函数参数类型
class DemoClass {
public:
void Printer(const DemoClass& sc, const int& i) {
}
};
template<typename R, typename T, typename ... Args/*, typename ... Params*/>
void MakeMemberActionDemoClass(R(T::*memberFunction)(Args...), Args&& ... args)
{
}
int main()
{
DemoClass d;
int z;
MakeMemberActionDemoClass(&DemoClass::Printer, d, z);
}
我获得以下错误:
error C2782: 'void MakeMemberActionDemoClass(R (__thiscall T::*)(Args...),Args &&...)' : template parameter 'Args' is ambiguous
1> could be 'const DemoClass&, const int&'
1> or 'DemoClass&, int&'
如果我删除& &在MakeMemberActionDemoClass的最后一个参数,仅在误差差值如下:
1> could be 'const DemoClass&, const int&'
1> or 'DemoClass, int'
什么我应该这样做,以便正确推导参数类型?
由于提前,
使用'R(T :: * memberFunction)(Args ...),Params && ... args',使它们分别被推导出来 –