Wie man element-Typ aus der STL-container-Instanz?

Weiß ich über value_type, key_type... aber Sie arbeiten auf Typen, nicht auf Instanzen.
Ich versuchte
Sachen wie :

std::set<uint64_t> mySet;   

decltype (mySet)::value_type pos;

Aber es funktioniert nicht.

EDIT: ich nutze VS 2010.

EDIT2: der Verwendungszweck dieser code war eine Art zu geben, es zu boost::lexical_cast<>
gibt es einen workaround, der es ermöglicht, dass ?
Ich möchte so etwas wie dies:

   mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
  //it is a iterator in vector of strings

EDIT3 : das funktioniert:

mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
  • Was bedeutet "funktioniert nicht" bedeutet?
  • decltype (mySet)::value_type pos; korrekt ist. Da ist ein Fehler in der 2010-compiler von Microsoft, die nicht decltype, gefolgt von einer :: (siehe Frage als Duplikat)
  • mögliche Duplikate von decltype und der scope-operator in C++
  • Da man offenbar den Umgang mit einer buggy-compiler, ein möglicher workaround wäre so etwas wie: auto pos = *(mySet.begin());
  • Wenn das, was Sie zu tun versuchen tatsächlich funktioniert, es scheint mir, dass Ihre Klammern an der falschen Stelle. Versuchen (decltype mySet)::value_type pos; und lassen Sie uns wissen, was passiert. (DISCLAIMER: ich habe noch nie verwendet decltype in meinem eigenen C++ - Programme, so ist dies nur eine Vermutung.)
  • Ein workaround: typedef decltype(mySet) T; T::value_type pos;
  • Verwenden Sie nicht uint64_t es sei denn, Sie haben eine absolute Voraussetzung, dass die Größe sein genau 64 bit. Verwenden uint_least64_t wird; stattdessen gibt es auf Systemen, die nicht über ein 64-bit-integer-Typ haben aber etwas größer.
  • Ich benutze MSVC 10 🙁
  • Ich Frage mich, ob die Leute auf der C-standard-Komitee wurden gesponsert von Tastatur-Herstellern, wenn Sie definiert <stdint>. In der Theorie uint_least64_t sollte verwendet werden, mehr als uint64_t, aber es wird es nie sein.
  • Ich hoffe, es wird werden, da uint64_t ist nicht erforderlich, um zu existieren. Aber ich Stimme zu: die Namen der meisten nützlichsten langatmig.
  • tnx, das funktioniert. 😀
  • Es gibt auch eine interessante (für mich) einen Knick in der Norm, dass int64_t wenn es vorhanden ist, wird garantiert, 2-Komplement, in der Erwägung, dass int_least64_t nicht. So gibt es eine zusätzliche Berücksichtigung bei der Auswahl Ihrer unterzeichneten geben, das nicht gelten zu unsigned.

InformationsquelleAutor NoSenseEtAl | 2012-09-12
Schreibe einen Kommentar