Мне нужно семейство функций инициализации с переменным числом используемых значений. Я использую их для реализации операции сбора с библиотекой Eigen. Вот как я это делаю сейчас с одним шаблоном для каждой длины вектора:
template<typename T1, typename T2>
inline void gather (Array<T1,4,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,4,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]];
}
template<typename T1, typename T2>
inline void gather (Array<T1,6,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,6,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]], from[index[4]], from[index[5]];
}
Есть ли способ заменить более длинный список шаблонов, как указано выше, одним шаблоном, параметризованным параметром длины (4 и 6 во фрагменте выше)? Если да, то можно ли это сделать с помощью спецификаций языка до С++ 11 (я использую Visual Studio 2010)?
Я хотел бы сохранить синтаксис значений, разделенных запятыми, так как я надеюсь, что в некоторых случаях это может привести к инициализации времени компиляции (const from
и index
). Хотя могу ошибаться в этом предположении. Список инициализаторов может иметь от 1 до 16 значений — не нужно беспокоиться о пустом списке.