将多态函数应用于每个元组元素的结果类型
Result type of applying polymorphic function to each tuple element
我正在尝试为元组编写一个转换函数,但是我找到的所有示例要么将函数应用于通过引用传递的元组元素,要么使用非一元函数。
但是我想要类似的东西
std::tuple<float, int> t(3.f, 2);
// returns std::tuple<bool, bool>:
auto r1 = transform(t, [] (auto v) { return v > decltype(v)(2); });
// returns std::tuple<float, int>:
auto r2 = transform(t, [] (auto v) { return v + decltype(v)(1); });
我得到的问题是:是否可以确定将一元函数应用于每个元组元素的结果类型?
std::make_tuple
为您进行类型推断。您确实需要index_sequence
包扩展来构建make_tuple
调用:
template <typename T, typename F, std::size_t... I>
auto tmap(T&& t, F&& f, std::index_sequence<I...>) {
return std::make_tuple(f(std::get<I>(std::forward<T>(t)))...);
}
template <typename T, typename F>
auto tmap(T&& t, F&& f) {
return tmap(std::forward<T>(t),
std::forward<F>(f),
std::make_index_sequence<
std::tuple_size<
typename std::decay<T>::type
>::value>{});
}
C++11兼容的演示在科利鲁。
请注意,当返回引用类型时,返回的元组将存储一个值f
。如果你真的想存储引用,你需要更复杂的帮助程序函数:
template <typename T, typename F, std::size_t... I>
auto tmap(T&& t, F&& f, std::index_sequence<I...>) {
return std::tuple<decltype(f(std::get<I>(std::forward<T>(t))))...>{
f(std::get<I>(std::forward<T>(t)))...
};
}
相关文章:
- C++:使用类在向量中搜索特定元素时,我得到了错误的结果
- AVX2 整数乘以有符号 8 位元素,产生有符号 16 位结果?
- 如何通过查找迭代器结果分配给一组对的元素
- 使用指针访问数组元素时出现意外结果
- 我写了这个简单的代码,应该计算一系列数组元素的最高数量,但结果很奇怪
- 打印整数指针元素时的结果不同
- 使用算法中的插入函数将元素插入空容器中,未给出预期的结果
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- 第一个字符串元素的地址产生意外结果
- 求和数组的每个元素的函数的结果
- 将多态函数应用于每个元组元素的结果类型
- 试图将字符串的两个元素组合在一起会得到错误的结果(c++)
- 为什么我的程序是,数组中任意两个元素之间的最小差异,给出相反的结果
- 如何将函数静态应用于非类型模板包的各个元素并对结果求和
- 如何进行每个元素的比较,并根据结果进行不同的操作
- 在条件与外部获取数组元素的结果不同
- unordered_multimap-迭代find()的结果会产生具有不同值的元素
- 在哪里存储Visitor模式中访问的每个元素的计算结果
- 是否有可能判断哪个数组元素比较结果为真?
- 如何使用本函数对两个字符数组进行元素相乘,并将相乘结果求和为int