Дано:Compile инициализации время массив с помощью наддува С. & MPL
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.
Я бы использовал этот массив, чтобы найти определенную функцию, заданную парами объектов. Объекты хранятся в качестве базовых классов, и я могу индексировать массив с помощью некоторой математики для определения индекса на основе идентификаторов, доступных в базовом классе.
Для делать это непосредственно в C++ 11 см http://stackoverflow.com/questions/2978259/programmatically-create -static-arrays-at-compile-time-in-c – TemplateRex