Faire enum cast en int
J'ai un problème sur ce code:
template <typename T>
void dosth(T& value,const T& default_value)
{
if (condition)
value = 10;
else
value = default_value;
}
Quand je l'appelle avec
enum {
SITUATION1,
STIUATION2
};
int k;
dosth(k,SITUATION1);
le compilateur g++ 4.5) dit
no matching function for call to 'dosth(int&,)'
Pourquoi ne pas le compilateur automatiquement jeté l'enum dans un int?
double possible de l'Absence de correspondance appel à la fonction <anonyme enum>
Je ne pense pas que c'est un doublon, mais je pense que c'est une partie de la réponse.
En fait oui, je pense que vous avez raison. J'ai raté le facteur de conversion à l'origine.
Je ne pense pas que c'est un doublon, mais je pense que c'est une partie de la réponse.
En fait oui, je pense que vous avez raison. J'ai raté le facteur de conversion à l'origine.
OriginalL'auteur xis | 2011-08-31
Vous devez vous connecter pour publier un commentaire.
Votre problème est dû au fait que le modèle ne peut pas être instancié à partir de la fonction des arguments que vous fournissez. Pas de conversion implicite en
int
se produit, car il n'y a pas de fonction à appeler à tous les.Si vous en fonte au lieu de tenter de s'appuyer sur la conversion implicite, votre programme de travail:
Ou, si vous fournir le modèle de fonction les arguments de manière explicite, alors l'argument de fonction sera converti implicitement comme vous vous attendez, et votre programme de travail:
template <typename T,typename DEFAULT_T> void dosth(T& value, const DEFAULT_T& default_value)
, pourquoi il ne peut toujours pas faire la conversion implicite?Autre problème; il n'y a pas de conversion implicite impliqués à tous. Mais, en C++03, arguments de modèle ne peut pas être sans nom types (
[C++03: 14.3.1/2]
); c'est n'est plus le cas en C++0x.Désolé pour toutes les éditions; j'ai mal au premier abord et ne pas rendre compte de l'ampleur, jusqu'à ce que j'avais fait tous mes changements itératifs.
btw: peut-être une autre façon de faire cela est d'utiliser
static const int DEFAULT_VALUE=SITUATION1;
OriginalL'auteur Lightness Races in Orbit
Serait-ce mieux pour les enums?
Permettra de sécurité de type. Puis l'utiliser pour créer un type de safte modèle.
c'est à dire de la Valeur pour la réussite ou l'échec.
OriginalL'auteur Ed Heal