我在元组中有一些值,我希望在元素方面添加另一个元组.所以我想要这样的功能:
std::tuple<int,int> a = {1,2};
std::tuple<int,int> b = {2,4};
std::tuple<int,int> c = a + b; // possible syntax 1
a += b; // possible syntax 2
a += {2,4}; // possible syntax 3
Run Code Online (Sandbox Code Playgroud)
输出元组将具有该值的位置 {3,6}
我想编写一个fold函数std::tuple来计算例如给定元组中所有元素的总和(或乘积).例如,给定
std::tuple<int,double> t = std::make_tuple(1,2);
Run Code Online (Sandbox Code Playgroud)
我想算一下
auto s = sumT(t); //giving 3
Run Code Online (Sandbox Code Playgroud)
我试过但是无法在下面编译我的模板编程(c ++ 11/1z)代码.我也试着去适应接受的答案对我的其他问题(如何执行用C元组算术++(C++ 11/C++ 17)? ),但无法弄清楚如何使用std::index_sequence在这种情况下.
我遇到的问题是:
1)我无法弄清楚类型,例如如何使用第一个元素的类型作为返回类型.目前,我_res在模板中使用了一个类型,但我不知道是否会阻止c ++的自动类型推理.
2)我想在不使用显式初始元素的情况下对其进行编程0,以便可以将其用于其他类型的fold操作.
目前,递归在最后一个元素处结束.我想结束递归,_size - 1以便我可以直接对最后一个元素执行操作而不需要求助0.
我下面的代码试图通过递归来做到这一点.但我不熟悉模板编程,以及循环如何为元组工作.
有人可以帮助修复代码或提出更好的解决方案吗?
到目前为止我的代码是:
#include <tuple>
#include <iostream>
#include <functional>
// helper class for fold operations
template<typename Op,typename _res, typename _Tp, size_t _i, size_t _size>
struct _tuple_fold {
static constexpr _res _op(Op const & op, const _Tp& _t) { …Run Code Online (Sandbox Code Playgroud) 我有一个具有类似元组的界面的自定义类.因为我想我的代码尽可能通用的,我认为这将是我的基础上的功能的算法是一个好主意std::get,std::tuple_size,std::tuple_element所以你只需要专注这些功能用我的算法.让我们称之为需要这些功能特化的概念Tuple.
现在我试图总结一个组件Tuple.函数声明应该是这样的:
template <class Tuple>
int sum_components(const Tuple& t);
Run Code Online (Sandbox Code Playgroud)
我想有很多模板编程涉及但我无法弄清楚如何做到这一点.
对于添加,我只会使用全局的重载+ operator.
我正在使用c ++ 1z.