Вы можете использовать шаблоны переменных и std::index_sequence
для вывода индексов из NDIM
и обрабатывать все вместе, используя синтаксис распаковки:
template <class Point, size_t... I>
void init(Point& p, std::index_sequence<I...>)
{
int dummy[] = { (p.set<I>(1.0), 0)... };
(void)dummy;
}
Синтаксис (void_func(), 0)
вызывает функцию void, но возвращает 0
.Это необходимо, потому что вы не можете использовать синтаксис распаковки ...
для пустых функций.Присвоение его массиву и его использование (например, приведение к void
) гарантирует, что ничего не будет оптимизировано.
Затем вызовите эту функцию следующим образом:
init(point1, std::make_index_sequence<NDIM>());
Обратите внимание, что NDIM
должно быть const
.
Для получения более подробной информации о том, как работает index_sequence
, посмотрите здесь .