将push_back可变参数函数参数转换为向量?

时间:2017-04-03 23:10:45

标签: c++ debugging variadic-functions variadic

我正在尝试push_back变量函数的参数,如下所示,但编译器说存在类型不匹配(由于参数是一般类型,而向量是int)。如何使参数兼容?

vector<int> x;
template<typename... Rest>
void foo(Rest... rest) {
    x.push_back(rest...);
}

2 个答案:

答案 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...);
}

不那么紧凑,但更容易理解。