Wie entferne ich ein Tupel zurück in eine variadic Vorlagenliste von Typen?

8

Gibt es eine Möglichkeit, eine std::tuple<T...> zu entfernen, um sie wieder in T... zu bekommen?

Beispiel

Angenommen, vct<T...> ist eine vorhandene variadische Klassenvorlage ,

%Vor%

Hinweise

Ich kenne std :: tuple_element , aber ich brauche alle Elemente in einem Formular, das als T...

verwendet werden kann

Als Referenz habe ich diese gefunden Frage , die ähnlich ist, aber meine Bedürfnisse sind etwas einfacher (so hoffe ich, es gibt eine einfachere Lösung): alles, was ich brauche, ist die Liste der Typen, die in der tuple - ich interessiere mich nicht für die tatsächliche Werte einer tuple Instanz.

    
kfmfe04 14.03.2013, 19:47
quelle

4 Antworten

9

Nein, das ist nicht möglich. Argument-Packs sind das Ergebnis von Typableitungen und können in anderen Kontexten nicht erzeugt werden.

Sie könnten etwas Ähnliches tun, was Sie auf diese Weise verlangen:

%Vor%

Tatsächlich müssen Sie das Argument-Pack nicht in einem Tupel aufbewahren: Jede variadische Klassenvorlage ist OK:

%Vor%

Und hier ist ein Live-Beispiel .

    
Andy Prowl 14.03.2013, 19:53
quelle
8
%Vor%

dann verwenden Sie dies als:

%Vor%

Jetzt Y ist gleich wie X .

    
Nawaz 14.03.2013 19:53
quelle
3

Sie können ein Parameterpaket nicht direkt "zurückgeben". Sie benötigen also beispielsweise Folgendes:

%Vor%

und verwenden

%Vor%     
Daniel Frey 14.03.2013 19:52
quelle
2

Das Ziel besteht darin, ein Parameterpaket von einer Instanz einer Vorlage in eine andere Vorlage kopieren zu können. Ich habe es nicht auf tuple beschränkt, weil ... warum es auf tuple beschränkt?

%Vor%

Ausgabe ist "1 0 1" wie erwartet.

Das CopyPackTypes verwendet eine Zielvorlage und einen Quelltyp, der aus einem Parameterpaket als einziges Argument erstellt wurde. Es kopiert dann das Parameterpaket in die Zielvorlage.

Eine Standardtechnik besteht darin, Parameterpakete herumzutragen, um einen ansonsten nicht verwendbaren Typ wie:

zu erstellen %Vor%

, das nur als Platzhalter für eine Liste von Typen existiert. Sie können dann einige davon an eine andere Vorlage übergeben, und jedes Paket "tritt" nicht aufeinander. Wenn Sie es auf eine Zielvorlage anwenden möchten, verwenden Sie etwas wie oben " CopyPackTypes ", um es anzuwenden.

Ähnliche Techniken werden für Indexpakete verwendet:

%Vor%

ansonsten nutzlose Typen, die "Black Slates" sind, um Parameterklumpen herumzutragen.

    
Yakk 14.03.2013 20:34
quelle