鉴于:
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
是一个静态的signature方法bool(const obj&, const obj&)
。它专门用于不同的 obj 类型。
我将使用这个数组来查找给定对象对的特定函数。这些对象作为它们的基类保存,我可以用一些数学来索引数组,以根据基类中可用的 ID 确定索引。