Iteratie auf einem Tupel ... wieder

8

Es ist eine Weile her, dass ich C ++ gemacht habe, aber ich bin nicht vertraut mit Vorlagen.

Kürzlich habe ich versucht, eine Klasse zu schreiben, die ein std::vector<std::tuple<Types...>> umschließt. Diese Klasse muss Member-Funktionen haben, und ich muss wirklich iterieren über das Tupel. Wenn ich in der Lage bin, jedes Element eines Tupels (in der Reihenfolge) zu drucken, wäre ich in der Lage, alles zu tun, was ich brauche.

Ich habe eine Lösung mit einem Cast gefunden, aber ich bin nicht wirklich zuversichtlich, da es auf einem Cast basiert, den ich nicht wirklich mag (und wenn ich static_cast verwende, tut es das nicht kompilieren).

Meine Frage ist, ist der folgende Code korrekt, tragbar, ist es ein Hack und sollte ich einen anderen Weg finden, dies zu tun als diesen Cast zu benutzen? Auch diese Besetzung ist wahrscheinlich eine Laufzeit-Cast richtig? Gibt es eine Möglichkeit, das zu tun, was ich will?

%Vor%

Vielen Dank im Voraus für Ihre Antworten.

    
tforgione 15.02.2015, 21:32
quelle

2 Antworten

10

Verwenden Sie std::index_sequence_for , um Spaß und Gewinn zu haben.

%Vor%

BEARBEITEN: Live-Demo . Danke an @dyp. Dies verwendet einen Erweiterungstrick von diese Antwort .

    
Pradhan 15.02.2015, 21:40
quelle
0

Ich habe einen anderen Weg gefunden, zu tun, was ich will. Ich habe diesen Artikel verwendet, der die Elemente eines Tupels in absteigender Reihenfolge drucken kann, und ich verwende einen zweiten Index J == std::tuple_size<std::tuple<Types...>>::value - I so Ich kann die Vorlage spezialisieren, wenn I==0 .

%Vor%     
tforgione 16.02.2015 11:44
quelle