Comment obtenir de l'élément type de conteneur STL exemple?
Je sais à propos de value_type, key_type... mais ils fonctionnent sur les types, pas sur les instances.
J'ai essayé
des trucs comme :
std::set<uint64_t> mySet;
decltype (mySet)::value_type pos;
Mais il ne marche pas.
EDIT: j'utilise VS 2010.
EDIT2: le prupose de ce code est d'obtenir un type de le donner à boost::lexical_cast<>
est-il une solution qui permet à qui ?
Je veux quelque chose comme ceci:
mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
//it is a iterator in vector of strings
EDIT3 : cela fonctionne:
mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
Que signifie "ne fonctionne pas"?
double possible de decltype et la portée de l'opérateur en C++
Étant donné que vous êtes apparemment affaire à un buggy compilateur, une solution possible serait quelque chose comme:
Une solution de contournement:
decltype (mySet)::value_type pos;
est correct. Il y a un bug en 2010, dans le compilateur de Microsoft qui ne permet pas de decltype d'être suivi par un ::
(voir la question liée doublons)double possible de decltype et la portée de l'opérateur en C++
Étant donné que vous êtes apparemment affaire à un buggy compilateur, une solution possible serait quelque chose comme:
auto pos = *(mySet.begin());
Une solution de contournement:
typedef decltype(mySet) T; T::value_type pos;
OriginalL'auteur NoSenseEtAl | 2012-09-12
Vous devez vous connecter pour publier un commentaire.
decltype (mySet)::value_type
est correct. Assurez-vous que vous avez le C++11 mode activé dans votre compilateur. Si vous avez, alors c'est un bug du compilateur.Une solution possible consiste à utiliser l'identité metafunction:
VS2010 ne vous permet pas d'utiliser de résolution de portée sur
decltype
, mais voici un peu de mal façon qui rend VS2010 dedecltype
correct:#define decltype(...) std::identity<decltype(__VA_ARGS__)>::type
OriginalL'auteur Fanael
Je ferais l'inverse:
OriginalL'auteur Pete Becker
Voici un exemple simple de la méthode d'impression qui imprime les éléments d'une file d'attente de priorité:
Le problème est, qu'après l'impression de tous les éléments de la file d'attente est vide.
Pour restaurer la file d'attente à l'état original de nous ajouter une couche vecteur contenant. Le type
des éléments de la file d'attente est déduite à partir de la file d'attente:
OriginalL'auteur Andrushenko Alexander