Spécialisation de template pour le type tableau
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 :
Code:
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 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.
Cependant en spécialisant la classe is_array pour les tableaux de 2 éléments, j'ai bien le comportement voulu :
Code:
1 2 3 4 5
| template< typename T >
struct is_array< T[2] >
{
static const bool value = true;
}; |
Ma question est :
-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.