Dans un souci de compréhension (à comprendre par là que je ne suis pas atteint de NIH), je suis en train d'implémenter une version de la classe is_array de Boost.
J'ai le code suivant :Cependant lorsque j'instancie la classe is_array pour un type tableau, ce n'est pas la classe spécialisée qui est instanciée mais la générique.
Code : 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
17
18
19
20
21
22 #include <iostream> using namespace std; template<typename T> struct is_array { static const bool value = false; }; template< typename T > struct is_array< T[] > { static const bool value = true; }; int main() { is_array< int[2] > :: value ? cout << "array" << endl : cout << "other type" << endl; return 0; }
Cependant en spécialisant la classe is_array pour les tableaux de 2 éléments, j'ai bien le comportement voulu :
Ma question est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template< typename T > struct is_array< T[2] > { static const bool value = true; };
-est ce possible de "spécialiser génériquement" la classe is_array pour les différentes tailles de tableau c'est à dire est ce qu'il est possible de n'avoir qu'une spécialisation qui gérerait toutes les tailles ?
PS : j'ai été voir le code de Boost, j'ai l'impression que c'est le préprocesseur qui crée les bonnes spécialisations selon la taille du tableau et son type d'élément, mais j'aimerais tout de même savoir cela est réalisable sans utiliser le préprocesseur.
Partager