2017-04-03 85 views
0

我想push_back可变参数的参数如下所示,但编译器说有一个类型不匹配(由于参数是一个普通类型,而向量是int)。我应该怎么做才能使参数兼容?Push_back可变参数函数参数到一个向量?

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

回答

1

在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), ...); 
} 
+0

[Demo](https://wandbox.org/permlink/07ehs0Nj66Hrl0eB) –

+0

谢谢!但[]的目的是什么? –

+0

你确定那些push_backs必须从左到右进行评估吗?否则您可能会以令人困惑的顺序收到物品。 – sp2danny

0

开始与碱的情况下:

void push_all(vector<int>&) {} 

与继续'逐步拆包'

template<typename... Rest> 
void push_all(vector<int>& vec, int val, Rest... rest) 
{ 
    vec.push_back(val); 
    push_all(vec, rest...); 
} 

不是很紧凑,但更容易打理。