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'.e insert<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 la Value 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)
InformationsquelleAutor wowofbob | 2013-12-14