我想繞過參數包,需要一點幫助。C++ 11比較參數包
看看下面這個人爲的例子,有沒有辦法將Args與T進行比較,並且只有在匹配時才允許bar()
編譯?例如,如果我創建Task<void(int, char, float)>
我想bar(float, char, float)
不編譯,但bar(int, char, float)
編譯得很好。這是否可行?
template <typename... Types>
struct foo {};
template<typename T>
struct Task;
template<typename R, typename...Args>
struct Task<R(Args...)>
{
template<typename... T>
std::enable_if<is_same<T, Args>
void bar(T... args)
{
//do something here
}
};
int main()
{
Task<int(int)> task;
int a = 0;
float b = 1.0;
bool c = false;
//compiles
task.bar(a);
//none of these should compile
task.bar(b);
task.bar(c);
task.bar(a, b);
task.bar(a, b, c);
}
也許使用元組'is_same'?我甚至不知道什麼是「T」和「參數」是什麼意思。 或者我只是誤解了語法。 – maxbc
上面有很多問題。如果你沒有這個包,它就不會編譯。試着讓你的代碼與*參數完全一致。然後開始添加'...'s。 – Yakk