const配列をTMPで初期化して参照テーブル云々、失敗
const配列をTemplate Meta Programmingで初期化して参照テーブルにしたかった。
template<int N> struct table { static const int value[N]; }; template<int N> const int table<N>::value[N] = /*???*/; int foo(int n) { return table<10>::value[n]; }
みたいなことができたらいいなと。
c++ - Is it possible to create and initialize an array of values using template metaprogramming? - Stack Overflow
いろいろ変態的なやり方が紹介されているけど、const配列はやっぱ無理なのかなー
仕方ないから
#include <boost/preprocessor/repetition/enum.hpp> template<int N> struct table_impl { /*何らか初期化*/ static const int value = N * N; //例えば2乗とか }; template<int N> struct table { static const int value[N]; }; template<int N> const int table<N>::value[N] = { #define INIT_PRED(_1, n, _2) table_impl<n>::value BOOST_PP_ENUM(10, INIT_PRED, _) #undef INIT_PRED }; int foo(int n) { return table<10>::value[n]; }
プリプロセッサになってしまうか...