Я только начал изучать 17-кратные выражения C ++. Я понимаю, что можно применить выражение свертки к кортежу, как в следующем примере (на основе ответов на этот вопрос ):
#include <iostream>
#include <tuple>
int main() {
std::tuple in{1, 2, 3, 4};
std::cout << "in = ";
std::apply([](auto&&... x) { ((std::cout << x << ' '), ...); }, in);
std::cout << std::endl;
std::multiplies<int> op;
auto out = std::apply([&](auto&& ...x) { return std::tuple{op(x, 3)...}; }, in);
std::cout << "out = ";
std::apply([](auto&&... x) { ((std::cout << x << ' '), ...); }, out);
std::cout << std::endl;
}
Результат:
in = 1 2 3 4
out = 3 6 9 12
Можно ли соединить два кортежа вместе, используя аналогичный подход? Ссылаясь на приведенный выше пример, я хотел бы заменить константу 3 другим кортежом, например, этой гипотетической версией std :: apply:
auto out = std::apply([&](auto&& ...x, auto&& ...y) { return std::tuple{op(x, y)...}; }, inX, inY);
В случае, если выражения свёртки не применимы для этой цели, это есть ли альтернативный метод для достижения того же результата в C ++ 20 (кроме рекурсии шаблона и / oriSFINAE)?