Fehler mit variadiac Vorlage: "- parameter pack muss erweitert werden"

Hier ein variadic template-Funktion, die ich geschrieben habe:

template<class Container, class Value, class... Args>
Value& insert(Container& c, Args&&... args) {
    c.emplace_back(args);
    return c.back();
}

Wenn ich insert wie ich bin immer ein Fehler:

list<int> lst;
int& num = insert<list<int>, int, int>(lst, 4);

Den Fehler beschwert, wird diese Zeile in den Körper des insert:

c.emplace_back(args); //<= 'args' : parameter pack must be
                      //            expanded in this context

Was bedeutet das und wie kann ich es beheben?

  • Sie vergaß Ellipse: c.emplace_back(args...);.
  • Value sollte auch der erste template-argument also, das template-argument-Abzug verwendet werden kann, für die anderen Argumente (ich.e insert<int>(lst, 4);)
  • Und vergessen Sie vorwärts: c.emplace_back(std::forward<Args>(args)...);
  • Ein container ist erforderlich, um ein Mitglied value_type Sie können es verwenden, um loszuwerden, das Value template-parameter: template<class Container, class... Args> typename Container::value_type& insert(Container& c, Args&&... args); insert(lst, 4);
  • Vielen Dank an alle)
InformationsquelleAutor wowofbob | 2013-12-14
Schreibe einen Kommentar