Was sind gute Anwendungsfälle für Tupel in C ++ 11?

Was sind gute Anwendungsfälle für die Verwendung von Tupeln in C++11? Ich habe zum Beispiel eine Funktion, die definiert einen lokalen struct wie folgt:

template<typename T, typename CmpF, typename LessF>
void mwquicksort(T *pT, int nitem, const int M, CmpF cmp, LessF less)
{
  struct SI
  {
    int l, r, w;
    SI() {}
    SI(int _l, int _r, int _w) : l(_l), r(_r), w(_w) {}
  } stack[40];

  //etc

War ich erwägen, zu ersetzen, die SI struct mit einem std::tuple<int,int,int>was eine wesentlich kürzere Erklärung mit bequemen Konstruktoren und Operatoren bereits vorgegeben, allerdings mit folgenden Nachteilen:

  • Tupel-Elemente sind versteckt in dunklen, Implementierung-definiert Strukturen. Obwohl Visual studio interpretiert und zeigt Ihren Inhalt schön, ich kann immer noch nicht setzen bedingte Haltepunkte, die abhängig von dem Wert der Tupel-Elemente.
  • Den Zugriff auf einzelne Tupel-Felder (get<0>(some_tuple)) ist weit Ausführlicher als der Zugriff auf struct-Elemente (s.l).
  • Zugriff auf Felder über den Namen ist viel informativer (und kürzer!) als von numerischen index.

Die letzten beiden Punkte sind etwas angesprochen tie Funktion. Angesichts dieser Nachteile, was wäre ein guter use-case für Tupel?

UPDATE Stellt sich heraus, dass VS2010 SP1 debugger nicht zu zeigen, den Inhalt des folgenden array std::tuple<int, int, int> stack[40]aber es funktioniert, wenn es codiert mit einer struct. So die Entscheidung ist im Grunde ein no-brainer: wenn Sie jemals haben werden, die Prüfung der Werte verwenden Sie ein struct [esp. wichtig bei Debugger wie GDB].

InformationsquelleAutor der Frage zvrba | 2012-04-21

Schreibe einen Kommentar