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
Je veux l'utiliser dans le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }; }; };
mais le compilo de Visual Studio 10 se plaint en me disant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; };
il me semble que l'expression details::NbCoeffs<DEGREE> doit etre evaluée a la compil .. je ne comprends pas le compilo du coup...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'
Quelqu'un a une idée ?
Merci
V
Partager