0
我想push_back可變參數的參數如下所示,但編譯器說有一個類型不匹配(由於參數是一個普通類型,而向量是int)。我應該怎麼做才能使參數兼容?Push_back可變參數函數參數到一個向量?
vector<int> x;
template<typename... Rest>
void foo(Rest... rest) {
x.push_back(rest...);
}
我想push_back可變參數的參數如下所示,但編譯器說有一個類型不匹配(由於參數是一個普通類型,而向量是int)。我應該怎麼做才能使參數兼容?Push_back可變參數函數參數到一個向量?
vector<int> x;
template<typename... Rest>
void foo(Rest... rest) {
x.push_back(rest...);
}
在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), ...);
}
開始與鹼的情況下:
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...);
}
不是很緊湊,但更容易打理。
[Demo](https://wandbox.org/permlink/07ehs0Nj66Hrl0eB) –
謝謝!但[]的目的是什麼? –
你確定那些push_backs必須從左到右進行評估嗎?否則您可能會以令人困惑的順序收到物品。 – sp2danny