Usted puede tener que para las matrices de tamaño fijo:
int a[] = { foo<0>::value, foo<1>::value, ... };
Arrays de tamaño arbitrario, sin embargo no se pueden hacer sin metaprogramación de preprocesador - Boost.Preprocessor puede ayudar aquí.
Otra cosa en la que puede que desee tener en cuenta son las secuencias en tiempo de compilación de las constantes integrales, p. utilizando Boost.MPL:
template<int n>
struct squares {
typedef typename squares<n-1>::type seq;
typedef typename boost::mpl::integral_c<int, n*n>::type val;
typedef typename boost::mpl::push_back<seq, val>::type type;
};
template<>
struct squares<1> {
typedef boost::mpl::vector_c<int, 1>::type type;
};
// ...
typedef squares<3>::type sqr;
std::cout << boost::mpl::at_c<sqr, 0>::type::value << std::endl; // 1
std::cout << boost::mpl::at_c<sqr, 1>::type::value << std::endl; // 4
std::cout << boost::mpl::at_c<sqr, 2>::type::value << std::endl; // 9
(Tenga en cuenta que esto probablemente se podría hacer más elegante utilizando MPLS algoritmos)
Si usted es más curioso sobre el tiempo de compilación sujetos los libros "Modern C Diseño ++" (conceptos básicos de TMP) y "Metaprogramación de plantillas C++" (principalmente MPL explicado en profundidad).
Puede que esté mejor con la metaprogramación de preprocesador. No creo que C++ tenga suficientes soluciones. – Potatoswatter
O, mi favorito personal para la construcción de datos estructurados en tiempo de compilación, utilice un ensamblador de macros. – Potatoswatter
De IBM 'El arte de la metaprogramación', el autor le da un script perl para generar su tabla. Tal vez no sea lo que estás buscando, pero alguien podría apreciarlo. –