Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3005 connectés 

 


Dernière réponse
Sujet : [C++] Templates
wpk :jap: ah, j'y avais pas pensé d'essayer de passer par valeur.
Mais ce que je ne comprends pas c'est pourquoi dans le cas de la map par exemple
explicit map(const _Pr& _Pred = _Pr(), const _A& _Al = _A())  
 : _Tr(_Pred, false, _Al) {}  
 
, le compilo accepte le type de construction qu'il me refuse à moi (du moment ou sur le type T je lui fournis un ctor par defaut & un operateur de recopie, il devrait pouvoir construire mon T).
 
Y'a ptetre un autre probleme en fait : c'est qu'à l'instantiation
de la methode template, le seul discriminant qui reste si on passe par defaut, c'est la valeur de retour...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
wpk :jap: ah, j'y avais pas pensé d'essayer de passer par valeur.
Mais ce que je ne comprends pas c'est pourquoi dans le cas de la map par exemple
explicit map(const _Pr& _Pred = _Pr(), const _A& _Al = _A())  
 : _Tr(_Pred, false, _Al) {}  
 
, le compilo accepte le type de construction qu'il me refuse à moi (du moment ou sur le type T je lui fournis un ctor par defaut & un operateur de recopie, il devrait pouvoir construire mon T).
 
Y'a ptetre un autre probleme en fait : c'est qu'à l'instantiation
de la methode template, le seul discriminant qui reste si on passe par defaut, c'est la valeur de retour...
Virango

wpk a écrit a écrit :

Une petite question sur les templates:
 
j'ai une methode :
 
template <typename T>
T  getValue(const std::string &group, const std::string &key, const T & valueByDefault)
 
le probleme c'est que j'aimerais faire plutot ca :
template <typename T>
T  getValue(const std::string &group, const std::string &key, const T & valueByDefault = T())
 
càd que la default value a une valeur par defaut  :)  
 
Le probleme c'est que VC++ 6 me sort une erreur
error C2065: 'T' : undeclared identifier  
quand je rajoute le = T()
 
du coup j'ai rien trouvé d'autre comme solution que de surcharger la 1ere methode par un
 
template <typename T>
T  getValue(const std::string &group, const std::string &key)
{
...
if (pasTrouve)
   return T();
}
 
ce qui n'est pas tres elegant, je vous le concede.
 
Ce qui me surprend le plus c'est que le meme compilo, compile sans probleme ca (tiré de la declaration de la map de la stl):
 
explicit map(const _Pr& _Pred = _Pr(), const _A& _Al = _A())
  : _Tr(_Pred, false, _Al) {}
 
Donc si qcq a une idee jsuis preneur.  




 
L'erreur ne vient pas de ton type template mais du fait que tu utilises un passage par reference dans la déclaration du type de ton dernier paramètre. Supprime le & et cela fonctionne:
 
template <typename T>
T  getValue(const std::string &group,  
            const std::string &keyconst ,
            T  valueByDefault = T());
 
Avec VC++ 6.0 ca compile chez moi.

wpk :( c'est bien ce que je craignais, faut que je change de compilo moa, le VC++ 7 est encore dispo en dl beta sur le site de crosoft ?
Da True Clouseau Aucun pb avec g++ ou VC++7.
wpk ptit up du matin
wpk Une petite question sur les templates:
 
j'ai une methode :
 
template <typename T>
T  getValue(const std::string &group, const std::string &key, const T & valueByDefault)
 
le probleme c'est que j'aimerais faire plutot ca :
template <typename T>
T  getValue(const std::string &group, const std::string &key, const T & valueByDefault = T())
 
càd que la default value a une valeur par defaut  :)  
 
Le probleme c'est que VC++ 6 me sort une erreur
error C2065: 'T' : undeclared identifier  
quand je rajoute le = T()
 
du coup j'ai rien trouvé d'autre comme solution que de surcharger la 1ere methode par un
 
template <typename T>
T  getValue(const std::string &group, const std::string &key)
{
...
if (pasTrouve)
   return T();
}
 
ce qui n'est pas tres elegant, je vous le concede.
 
Ce qui me surprend le plus c'est que le meme compilo, compile sans probleme ca (tiré de la declaration de la map de la stl):
 
explicit map(const _Pr& _Pred = _Pr(), const _A& _Al = _A())
  : _Tr(_Pred, false, _Al) {}
 
Donc si qcq a une idee jsuis preneur.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)