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 : 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 };
};
 
};
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
 
 
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 : 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'
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