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.einsert<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, dasValue
template-parameter:template<class Container, class... Args> typename Container::value_type& insert(Container& c, Args&&... args); insert(lst, 4);
- Vielen Dank an alle)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler aufgrund der fehlenden Auslassungszeichen (
...
) nachargs
bei der übergabe werden alle individuellen Parameter (statt der parameter-pack) zuemplace_back
.Den festen (und verbesserte) version: