我刚开始学习 C++17 折叠表达式。我知道可以将折叠表达式应用于元组,如下例所示(受对此问题的回复启发):
#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 除外)?