我正在尝试push_back变量函数的参数,如下所示,但编译器说存在类型不匹配(由于参数是一般类型,而向量是int)。如何使参数兼容?
vector<int> x;
template<typename... Rest>
void foo(Rest... rest) {
x.push_back(rest...);
}
答案 0 :(得分:3)
在C ++ 14及之前:
void foo(Rest... rest) {
int a[] = {0, (x.push_back(rest), 0)...};
static_cast<void>(a); // unused
}
在C ++ 17中:
void foo(Rest... rest) {
(x.push_back(rest), ...);
}
答案 1 :(得分:0)
从一个基本案例开始:
void push_all(vector<int>&) {}
继续逐步拆包&#39;
template<typename... Rest>
void push_all(vector<int>& vec, int val, Rest... rest)
{
vec.push_back(val);
push_all(vec, rest...);
}
不那么紧凑,但更容易理解。