与えられた:
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;
私はコンパイル時にこの種の機能を取得しようとしています:
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;
}
}
私はそれが次のようになると思います:
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 に基づいてインデックスを決定するために、いくつかの数学で配列にインデックスを付けることができます。