Varadic templates - Zusammenfassung?
-
Hallo zusammen,
Kurze einfache Frage:
Gibt es irgendwo eine komplette Zusammenfassung von den Variadic Templates? Nicht sowas komplexes wie es im Standard steht, einfach nur eine Erklärung, wie man sie verwendet. Weil mir persönlich kämen da noch lustige Ideen in den Kopf, was man damit tun könnte, aber ich könnte mir vorstellen, dass man beim Komittee nicht soweit gegangen ist. Zum Beispiel fände ich sowas toll:template<typename ...ArgsT> void foo(ArgsT ...args) { // ... ArgsT... { // Der Block wird für jeden Typ in ArgsT dupliziert. // Der aktuelle Typ wird über ArgsT angesprochen. // Quasi eine Codegenerierung. } // Das gleiche könnte man auch mit args machen. // ... }Aber wahrscheinlich denke ich da zu utopisch

Aber würde halt schon mal genau wissen, auf was ich mich da genau einstellen kann.Grüssli
-
Kannst du rekursiv lösen.
Einfach eine funktion aufrufen mit <T, ArgsT...> als Template Params. Das unrollt sich zur compile time und hat selbe funktionalität wie du sie vorschlägst nur mit einheitlicherer syntax.
-
Also du meinst sowas?
template<typename T, typename ...CarryT> void foo(T const& val, CarryT const& ...carry) { // ... Was getan werden muss ... foo(carry...); // <- Geht das wirklich? } template<typename ...ArgsT> void bar(ArgsT const& ...args) { // Init code foo(args...); // <- Geht das wirklich? // Exit code } // Geht das auch mit diesem const&?Ich bekomme da immer Angst wegen des Stacks (rekursiver Aufruf), wobei das wohl eher völlig unbegründet ist. Habe traumatisch Erlebnisse mit dem Stack gemacht

Eine Zusammenfassung wäre aber trotzdem noch nett

Grüssli
-
Dravere schrieb:
Also du meinst sowas?
Ja - wobei ich zugeben muss keine Ahnung von der Syntax zu haben.
foo(carry...);
kann also kaese sein - aber die Idee ist korrekt.Ich bekomme da immer Angst wegen des Stacks (rekursiver Aufruf), wobei das wohl eher völlig unbegründet ist. Habe traumatisch Erlebnisse mit dem Stack gemacht

Der Compiler unrollt dir das zur compiletime.
Eine Zusammenfassung wäre aber trotzdem noch nett

was willst du denn wissen?
variadic templates verhalten sich aehnlich wie eine liste in einer funktionalen sprache und alle operationen auf der liste passieren zur compiletime.