Erreur avec variadiac modèle: “paramètre pack doit être augmenté”
Voici un variadic template de fonction que j'ai écrit:
template<class Container, class Value, class... Args>
Value& insert(Container& c, Args&&... args) {
c.emplace_back(args);
return c.back();
}
Lorsque j'utilise insert
comme ça j'obtiens une erreur:
list<int> lst;
int& num = insert<list<int>, int, int>(lst, 4);
L'erreur se plaint de cette ligne dans le corps de insert
:
c.emplace_back(args); //<= 'args' : parameter pack must be
// expanded in this context
Ce que cela signifie et comment puis-je résoudre ce problème?
- Vous avez oublié de points de suspension:
c.emplace_back(args...);
. Value
devrait également être le premier argument de modèle, de sorte que le modèle d'argument déduction peut être utilisé pour les autres arguments (j'.einsert<int>(lst, 4);
)- Et vous avez oublié de l'avant:
c.emplace_back(std::forward<Args>(args)...);
- Un conteneur est nécessaire d'avoir un membre
value_type
, vous pouvez l'utiliser pour se débarrasser de laValue
paramètre de modèle:template<class Container, class... Args> typename Container::value_type& insert(Container& c, Args&&... args); insert(lst, 4);
- Merci tout le monde)
Vous devez vous connecter pour publier un commentaire.
L'erreur est due au manque de points de suspension (
...
) aprèsargs
lors du passage de tous les paramètres individuels (plutôt que le paramètre pack) pouremplace_back
.Le fixe (et amélioré) version: