164 Stimmen

Wie kann man über die Elemente eines std::tuple iterieren?

Wie kann ich über ein Tupel iterieren (mit C++11)? Ich habe das Folgende versucht:

for(int i=0; i<std::tuple_size<T...>::value; ++i) 
  std::get<i>(my_tuple).do_sth();

aber das funktioniert nicht:

Fehler 1: sorry, unimplementiert: kann 'Listener ...' nicht in eine Argumentliste mit fester Länge erweitern.
Fehler 2: i kann nicht in einem konstanten Ausdruck vorkommen.

Wie kann ich also korrekt über die Elemente eines Tupels iterieren?

-1voto

Slava Punkte 42033

Das Tupel von boost bietet Hilfsfunktionen get_head() y get_tail() Ihre Hilfsfunktionen könnten also wie folgt aussehen:

inline void call_do_sth(const null_type&) {};

template <class H, class T>
inline void call_do_sth(cons<H, T>& x) { x.get_head().do_sth(); call_do_sth(x.get_tail()); }

wie hier beschrieben http://www.boost.org/doc/libs/1_34_0/libs/tuple/doc/tuple_advanced_interface.html

mit std::tuple sollte es ähnlich sein.

Leider ist es so, dass std::tuple scheint eine solche Schnittstelle nicht zu bieten, so dass die zuvor vorgeschlagenen Methoden funktionieren sollten, oder man müsste zu boost::tuple die weitere Vorteile hat (wie die bereits genannten io-Operatoren). Allerdings gibt es einen Nachteil von boost::tuple mit gcc - es akzeptiert keine variadic Vorlagen noch, aber das kann bereits behoben werden, da ich nicht die neueste Version von Boost auf meiner Maschine installiert haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X