2017-04-03 1 views
0

J'essaye d'inverser les paramètres d'une fonction variadique comme montré ci-dessous, mais le compilateur dit qu'il y a une incompatibilité de type (parce que les paramètres sont un type général alors que le vecteur est int). Que dois-je faire pour rendre les paramètres compatibles?Push_back paramètres de la fonction variadique dans un vecteur?

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

Répondre

1

En C++ 14 et avant:

void foo(Rest... rest) { 
    int a[] = {0, (x.push_back(rest), 0)...}; 
    static_cast<void>(a); // unused 
} 

En C++ 17:

void foo(Rest... rest) { 
    (x.push_back(rest), ...); 
} 
+0

[Démo] (https://wandbox.org/permlink/07ehs0Nj66Hrl0eB) –

+0

Merci! Quel est le but d'un [] cependant? –

+0

Êtes-vous sûr que ces push_backs doivent être évalués de gauche à droite? Sinon, vous pourriez obtenir des éléments dans un ordre déroutant. – sp2danny

0

Commencez avec un boîtier de base:

void push_all(vector<int>&) {} 

Continuer avec «Déballage progressif»

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

Pas aussi compact, mais un peu plus facile à grok.