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 ,
Hinweise
Ich kenne std :: tuple_element , aber ich brauche alle Elemente in einem Formular, das als T...
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.
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 .
Sie können ein Parameterpaket nicht direkt "zurückgeben". Sie benötigen also beispielsweise Folgendes:
%Vor%und verwenden
%Vor% 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?
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.
Tags und Links c++ c++11 templates variadic-templates std