我想使用指向成員函數指針和參數包的指針調用函數。下面給出代碼:使用參數包推導函數參數類型
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',使它們分別被推導出來 –