考えると使用して、配列の時の初期化をコンパイルします。私はそれはのようになります考えてブーストPP&MPL
for(size_t i = 0; i < numTypes; ++i)
{
for(size_t j = 0; j < numTypes; ++j)
{
arr[i*numTypes+j] = ObjPair<boost::mpl::at_c<vecType, i>::type, boost::mpl::at_c<vecType, j>::type>::Foo;
}
}
:私はコンパイル時にこの種の機能を取得しようとしている
typedef boost::mpl::vector<Type1, Type2, Type3> types;
const size_t numTypes = boost::mpl::size<types>::value;
std::array<std::function<bool(const obj&, const obj&)>, numTypes*numTypes> arr;
を:
std::array<std::function<bool(const obj&, const obj&)>, numTypes*numTypes> arr = { BOOST_PP_FOR((0, numTypes), PRED, OP, MACRO) };
しかし、私はそれが(私はBOOST_PP_FORを使用しての私の完全な失敗した試みを投稿していなかった)作業を取得することはできません。
ObjPair<T1, T2>::Foo
は、署名の静的メソッドbool(const obj&, const obj&)
です。異なるobj型に特化しています。
私は、この配列を使用して特定のオブジェクトのペアを特定します。オブジェクトは基底クラスとして保持され、基本クラスで使用可能なIDに基づいてインデックスを決定するために、数学で配列をインデックスできます。
http://stackoverflow.com/questions/2978259/programmatically-createを参照してください、 -static-arrays-at-compile-time-in-c – TemplateRex