Als «variadic-templates» getaggte Fragen

Variadische Vorlagen sind Vorlagen, die eine variable Anzahl von Parametern annehmen.

8
Ein Tupel „entpacken“, um einen passenden Funktionszeiger aufzurufen
Ich versuche, in einer std::tuplevariierenden Anzahl von Werten zu speichern , die später als Argumente für einen Aufruf eines Funktionszeigers verwendet werden, der den gespeicherten Typen entspricht. Ich habe ein vereinfachtes Beispiel erstellt, das das Problem zeigt, das ich nur schwer lösen kann: #include <iostream> #include <tuple> void f(int a, …

6
make_unique und perfekte Weiterleitung
Warum gibt es std::make_uniquein der Standard-C ++ 11-Bibliothek keine Funktionsvorlage? ich finde std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); ein bisschen ausführlich. Wäre das Folgende nicht viel schöner? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Dies verbirgt das newschön und erwähnt den Typ nur einmal. Wie auch immer, hier ist mein Versuch einer …

1
Wie würde man std :: forward für alle Argumente in einer variadischen Funktion aufrufen?
Ich habe gerade eine generische Objektfabrik geschrieben und die Boost-Präprozessor-Metabibliothek verwendet, um eine variable Vorlage zu erstellen (mit 2010 und ohne Unterstützung). Meine Funktion verwendet rval-Referenzen und std::forwardfür eine perfekte Weiterleitung, und es hat mich zum Nachdenken gebracht ... Wenn C ++ 0X herauskommt und ich einen Standard-Compiler habe, würde …


2
Welche Regeln gelten für das Token „…“ im Zusammenhang mit variablen Vorlagen?
In C ++ 11 gibt es verschiedene Vorlagen wie diese: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } Hier gibt es einige Kuriositäten: Der Ausdruck std::forward<Args>(args)...verwendet beide Argsund argsnur einen ...Token. Darüber hinaus std::forwardist eine nicht variadische Vorlagenfunktion nur ein Vorlagenparameter und …

4
Wie speichere ich verschiedene Vorlagenargumente?
Ist es möglich, ein Parameterpaket für eine spätere Verwendung zu speichern? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } Dann …

10
Std :: tuple mit hübschem Druck
Dies ist eine Fortsetzung meiner vorherigen Frage zu hübsch gedruckten STL-Containern , für die wir eine sehr elegante und vollständig allgemeine Lösung entwickelt haben. In diesem nächsten Schritt möchte ich das hübsche Drucken std::tuple<Args...>mit variadischen Vorlagen einschließen (dies ist also ausschließlich C ++ 11). Denn std::pair<S,T>ich sage einfach std::ostream & …


6
Erweiterung des Variadic Template Packs
Ich versuche, verschiedene Vorlagen und Funktionen zu lernen. Ich kann nicht verstehen, warum dieser Code nicht kompiliert wird: template<typename T> static void bar(T t) {} template<typename... Args> static void foo2(Args... args) { (bar(args)...); } int main() { foo2(1, 2, 3, "3"); return 0; } Wenn ich kompiliere, schlägt es mit …

5
Wie kann man generische Berechnungen über heterogene Argumentpakete einer variablen Vorlagenfunktion durchführen?
PRÄMISSE: Nachdem ich ein wenig mit verschiedenen Vorlagen herumgespielt hatte, wurde mir klar, dass es bald ziemlich umständlich wird, etwas zu erreichen, das etwas über die trivialen Metaprogrammieraufgaben hinausgeht. Insbesondere fand ich mich für eine Art und Weise will auszuführen generische Operationen über ein Argument Pack wie Iterierte , Split …


3
Wie kann ich ein kartesisches Produkt von Typlisten in C ++ erstellen?
Selbsterklärend. Angenommen, ich habe Typlisten wie folgt: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Sie können eine variable Anzahl von Typlisten sein. Wie erhalte ich eine Typeliste für kartesische Produkte? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, …

3
Variadische Vorlagen: Entfalten Sie Argumente in Gruppen
Ich habe eine Funktion, die zwei Argumente akzeptiert: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } Und eine Variante, die ihre Argumente paarweise weiterleiten sollte: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 …

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.