Bonjour tout le monde.
Je me pose une question sur la spécialisation de template. Il m'arrive régulièrement de devoir écrire un template utilisé dans le cas général et une spécialisation pour un ou deux type particuliers.
Seulement voilà, quand je fais ça le template général est utilisé en lieu et place de la spécialisation si le type ne correspond pas a 100%. Du coup je dois écrire pleins de fois la spécialisation.
Prenons un exemple bidon :
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <iostream> template <typename T> bool is_builtin() { return false; } template <> bool is_builtin<int>() { return true; } class test {}; void main() { std::cout << "Type builtin 'test' : " << is_builtin<test>() << std::endl; std::cout << "Type builtin 'int' : " << is_builtin<int>() << std::endl; std::cout << "Type builtin 'unsigned int' : " << is_builtin<unsigned int>() << std::endl; std::cout << "Type builtin 'const int' : " << is_builtin<const int>() << std::endl; std::cout << "Type builtin 'const int&' : " << is_builtin<const int&>() << std::endl; }
Le code ci-dessus me permet donc de savoir si le type fournit est un type builtin ou non (encore une fois c'est un exemple).
Le problème est que la sortie donne :
Code text : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Type builtin 'test' : 0 Type builtin 'int' : 1 Type builtin 'unsigned int' : 0 Type builtin 'const int' : 0 Type builtin 'const int&' : 0
Normal puisque int n'est pas pareil que unsigned int, const int ou const int&, le cas général est donc utilisé plutôt que la spécialisation en int.
Donc pour que ça fonctionne comme souhaité il me faut écrire autant de spécialisation pour int qu'il y a de variante de ce type.
J'aimerai savoir s'il y a moyen de réduire le nombre de spécialisation à écrire ?
Partager