54 votes

Syntaxe de spécialisation des modèles C++

Dans C++ Primer Plus (2001, traduction tchèque), j'ai trouvé ces différentes syntaxes de spécialisation de modèle :

modèle de fonction

 template <typename T> void foo(T);

syntaxe de spécialisation

 void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5

En cherchant un peu sur Google, je n'ai trouvé que des exemples n ° 3. Y a-t-il une différence (en appel, compilation, utilisation) entre eux ? Certains d'entre eux sont-ils obsolètes/dépréciés ? Pourquoi ne pas simplement utiliser No.1 ?

1voto

gerardw Points 330

En utilisant Visual Studio 2012, cela semble fonctionner légèrement différemment s'il n'y a pas d'argument de fonction :

 template <typename T> T bar( );
//template int bar<int>( ) { return 0; } doesn't work
template < > int bar<int>( ) { return 0; } //does work

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X