Можете ли вы чередовать переменные параметры на сайтах вызовов?C++

Программы на C++. Форум разработчиков
Anonymous
Можете ли вы чередовать переменные параметры на сайтах вызовов?

Сообщение Anonymous »

Можно ли чередовать параметры шаблона внутри сайтов вызова функций?
Я фактически хочу реализовать следующее, но не знаю как (псевдокод):

Код: Выделить всё

template 
void foo(const Things *things)
{
static_assert(sizeof...(indices) == sizeof...(Ts));
constexpr n = sizeof...(Ts);
bar(
indices[0], parse(things[0]),
indices[1], parse(things[1]),
...
indices[n-1], parse(things[n-1]));
}
Примечание. Я знаю, что можно сделать следующее (псевдокод):

Код: Выделить всё

template 
void foo(const Things *things)
{
static_assert(sizeof...(indices) == sizeof...(Ts));
constexpr n = sizeof...(Ts);
bar(
indices[0], indices[1], ..., indices[n-1],
parse(things[0]),
parse(things[1]),
...
parse(things[n-1]));
}
Частичное решение, которое я придумал, — добавить вращающийся компонент:

Код: Выделить всё

template 
decltype(auto) swizzle()
{
return Func();
}

template 
decltype(auto) swizzle(size_t i0, T0 &&t0)
{
return Func(i0, std::forward(t0));
}

template 
decltype(auto) swizzle(size_t i0, size_t i1, T0 &&t0, T1 &&t1)
{
return Func(i0, std::forward(t0), i1, std::forward(t1));
}
но я думаю, что мне придется вручную писать каждый случай по арности, которую я хочу рассмотреть.

Подробнее здесь: https://stackoverflow.com/questions/704 ... call-sites

Вернуться в «C++»