2009-07-17 7 views
6

Lorsque vous appelez une fonction de modèle, est-il correct d'omettre le type après le nom de la fonction?Omettre des arguments dans les modèles C++

À titre d'exemple, considérons la fonction

modèle <typename T> vide f (T var) {...};

Est-il correct d'appeler simplement comme ceci:

int x = 5;
f (x);

ou dois-je avoir pour inclure le type?

int x = 5;
f <int> (x);

+3

Ne pourriez-vous juste essayer et voir ce qui se passe? Semble assez facile à tester. –

+6

@ Ed Swangren, La méthode "juste essayer" est très peu informative. Au mieux, il vous indique qu'un compilateur particulier autorise la syntaxe donnée. Il ne vous dit rien sur la sémantique ou l'exactitude de la déclaration en ce qui concerne la norme linguistique. – Trent

+0

Je suppose que j'aurais pu clarifier la question. Comme Trent l'a fait remarquer avec bonté, ce n'était pas tellement de si cela compilerait. Je suis curieux de savoir ce qui se passe dans les coulisses et d'avoir du mal à trouver de bonnes informations là-bas! – Chris

Répondre

17

Chaque fois que le compilateur peut déduire des arguments de modèle à partir des arguments de la fonction, il est acceptable de les ignorer. C'est également une bonne pratique, car cela rendra votre code plus facile à lire.

En outre, vous ne pouvez laisser des arguments de modèle de la fin, pas au début ou au milieu:

template<typename T, typename U> void f(T t) {} 
template<typename T, typename U> void g(U u) {} 

int main() { 
    f<int>(5);  // NOT LEGAL 
    f<int, int>(5); // LEGAL 

    g<int>(5);  // LEGAL 
    g<int, int>(5); // LEGAL 

    return 0; 
} 
10

Il n'y a rien de mal à l'appeler avec des paramètres de modèle implicites. Le compilateur vous indiquera s'il est confus, auquel cas vous devrez définir explicitement les paramètres du template pour appeler la fonction.

+1

Cette réponse n'a même pas de sens. Vous appelez toujours des fonctions explicitement ... – Zifre

+1

Zifre, je pense qu'il voulait dire "dans ce cas, vous devrez peut-être explicitement inclure les paramètres du modèle dans l'appel de la fonction". – aem

+1

Je ne parle pas d'appeler des fonctions explicitement ou implicitement Je parle de la définition explicite des paramètres de template ... – DeusAduro

Questions connexes