說我有一個接受可變參數和使用這些參數調用的其他函數的模板函數...傳遞變量參數在C++可變參數模板
template<typename... A> func(int i, A... args)
{
// do something common
switch (i)
{
case 0: x(args...); break;
case 1: y(args...); break;
case 2: z(args...); break;
default: break;
}
// do something common
}
...和其他功能被定義爲.. 。
void x(int a, int b);
void y(int a, int b); // note: takes same args as x()
void z(std::string a);
這並不編譯,因爲調用FUNC()用的std :: string參數不會找到X()的匹配而這需要一個std :: string參數Y()。
請注意,func()使用一些外部條件(本例中參數i的值)來決定將參數args傳遞給哪個其他函數。
有沒有辦法將這個關閉而不訴諸像填充參數參數到一個std:tuple和傳遞?
[編輯]
好吧,我想通了,作品不夠好,我的目的的方法。下面是一個例子類來說明......
class X
{
private:
bool a(int) { return true; }
bool b(int) { return true; }
template<typename... A> bool a(const A&...) { return false; }
template<typename... A> bool b(const A&...) { return false; }
public:
template<typename... A> void x(int i, const A&... args)
{
if (i == 0)
{
a(args...);
}
else
{
b(args...);
}
}
};
爲()和b的可變參數模板()的方法將捕獲),其中的參數是不是一個單一的int x.x中(撥打和接聽電話。這解決了我收到的編譯器錯誤,並啓用了我一直在尋找的更簡單的類API。
你將不得不使用專業化/ SFINAE。 –