Initialisation de la taille d'un std::array par metaprogrammation: echec
Bonjour,
je veux initialiser la taille d'une std::array a la compilation en fonction d'une valeur.
Pour cela j'ai ecrit le code suivant qui calcule la taille du tableau a la compilation par metaprog
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| namespace details {
//! compute number of coefficients wrt to DEGREE of correction polynoms at compile time using metaprogramming
template <unsigned int DEGREE>
struct NbCoeffs {
enum { value = DEGREE+1+NbCoeffs<DEGREE-1>::value};
};
template <>
struct NbCoeffs<0> {
enum { value = 1 };
};
}; |
Je veux l'utiliser dans le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
template <unsigned int DEGREE=3>
class A
{
protected :
//! enum to memorize the degree of the polynoms
typedef enum {
Degree = DEGREE;
};
//! internal array: fix-size compile-time arrays
typedef std::array<double,details::NbCoeffs<DEGREE>> InternalArrayType;
}; |
mais le compilo de Visual Studio 10 se plaint en me disant
Code:
1 2
| error C2975: 'std::tr1::array' : invalid template argument for '_Size', expected compile-time constant expression
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\array(18) : see declaration of 'std::tr1::array' |
il me semble que l'expression details::NbCoeffs<DEGREE> doit etre evalu�e a la compil .. je ne comprends pas le compilo du coup...
Quelqu'un a une id�e ?
Merci
V