Probablement une autre question stupide qui résulte de mon étude dans le mauvais livre C++ (j'ai l'intention de corriger cela).Erreur de type dans une fonction de modèle
Je joue avec sstream et essayé la fonction suivante:
template <class num> num fromString(const std::string& str) {
std::istringstream ss(str);
num temp;
ss >> temp;
return temp;
}
Quand je l'appeler comme:
int i = fromString<int>("123");
cela fonctionne bien. Mais si je l'appelle aime:
int i = fromString("123");
j'ai eu une erreur de compilation:
error: no matching function for call to ‘fromString(std::string&)’
Je pensais que le compilateur comprendrait que si j'assignant la valeur à un int
alors je dois parler de fromString<int>
, mais il semble que ce ne soit pas le cas.
Ai-je raté quelque chose? Dois-je toujours spécifier le type d'une fonction basée sur un modèle? Ou juste quand le type de modèle est le type de retour? Ou juste quand le type de modèle ne peut pas être déterminé par les types d'entrées?
humm ... Méchant! Je l'ai maintenant. Merci. Je suppose que je suis trop habitué à Haskell, qui est purement fonctionnel et donc ce genre de conversion automatique n'est pas possible. –
Heh, gâté par C++. Je n'ai jamais entendu ça. :) –