Помогите разобраться, как работает функция обхода кортежа:
template <typename F, typename T, size_t... i>
void tupleForeachImpl(F&& f, T&& t, std::index_sequence<i...>)
{
auto unused = { true, (f(std::get<i>(std::forward<T>(t))), void(), true)... };
}
template <typename F, typename T>
void tupleForeach(F&& f, T&& t)
{
tupleForeachImpl(std::forward<F>(f), std::forward<T>(t),
std::make_index_sequence<std::tuple_size<std::remove_reference_t<T> >::value>());
}
Не могу понять, что за магия происходит в 4ой строчке(где unused). Код увидел в коментариях к статье https://habrahabr.ru/post/318236/
unused
представляет собой фиктивный массив, при инициализации (начиная со второй позиции, чтобы оно работало для tuple<>
) элементов которого будет исполняться выражение (f(std::get<i>(std::forward<T>(t))), void(), true)...
. Это выражение разворачивается для каждого элемента кортежа. Теперь хитрая часть: внутри скобок сначала происходит вызов функции для i-того элемента кортежа c с заменой i
последовательно на 0, 1, 2...
; затем к результату вызова функции применяется встроенный operator ,
; на случай, если функция возвращает тип с перегруженным operator ,
после запятой идет void()
; затем идет еще один встроенный operator ,
и, наконец, значение для инициализации массива - true
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В общем когда запуская приложение высвечивается ошибка "is not valid win32 application"На просторах интернета ответов не нашёл по этому обращаюсь сюда
Не знаю какой должная быть ф-ия, которая принимает массив структур и сортирует его по одному элементу типа string, да ещё и по алфавитуМожет кто...
Имеется однонаправлянный связаный список, который находиться в двоичном файлеФайл мы создает из консоли, и там же его заполняем
Необходимо определить угол точки C относительно двух точек А и В, точки A и B образуют "отрезок", который можно ассоциировать с осью X, так как...