c++ - 使用 make_tuple 方法获取元组和函数并返回映射元组的最简单方法
问题描述
我一直在寻找这个主题,但未能找到任何令人满意的答案。我正在寻找一种方法来做大多数高级语言已经可以做的事情,采用一个元组和一个映射方法并返回一个映射的(也就是转换的)元组。理想情况下,这将在 c++14 中工作,但如果需要,c++17 也可以。
例如:
auto new_tuple = awesome_make_tuple( curtuple, []( auto & v ) { return v - 1; } )
类型可以不同,但提供的方法必须适用于任何给定类型。(Q方,该方法可以以某种方式模板化吗?)
解决方案
一种可能的方法是使用std::apply
解包元组并应用f
每个解包的元素,并重建一个元组。就像是:
template <typename Tuple, typename F>
auto tuple_map(const Tuple& t, F f) {
return std::apply([&](auto... args) { return std::make_tuple(f(args)...); }, t);
}
示例用法:
auto t = std::make_tuple(1, 2, 3);
auto mapped = tuple_map(t, [](auto x) { return x - 1; });
std::cout << std::get<0>(mapped) << ' '
<< std::get<1>(mapped) << ' '
<< std::get<2>(mapped) << '\n';
// prints 0 1 2
推荐阅读
- php - PHP 时间转换和时区
- reactjs - Yup.when: "`NaN` (从值 `NaN` 转换)"
- oracle - 创建安全策略功能以允许用户查看特定用户拥有的行
- c++ - 继承的成员函数的意外输出
- python - 从 .ui 自动完成
- r - 通过 for-loop 绘制子图从最后一个循环创建图
- dataframe - 加入后是否会推送 dropDuplicates 和 select 操作,以防未选择任何内容?
- mysql - 数据库导出-导入中的垃圾数据使用相同的表排序规则
- c# - 返回值方法不使用try catch语句返回值
- loops - 在定期调用的函数中每隔一段时间重复某些内容的优雅方式