相关疑难解决方法(0)

实现C++ 14 make_integer_sequence

我尝试实现C++ 14别名模板make_integer_sequence,这简化了类模板的创建integer_sequence.

template< class T, T... I> struct integer_sequence
{
    typedef T value_type;
    static constexpr size_t size() noexcept { return sizeof...(I) ; }

};

template< class T, T N>
using make_integer_sequence = integer_sequence< T, 0,1,2, ... ,N-1 >; // only for illustration.
Run Code Online (Sandbox Code Playgroud)

为了实现,make_integer_sequence我们需要一个辅助结构make_helper.

template< class T , class N >
using make_integer_sequence = typename make_helper<T,N>::type;
Run Code Online (Sandbox Code Playgroud)

实施make_helper并不太难.

template< class T, T N, T... I >
struct make_helper
{
   typedef …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11 c++14

47
推荐指数
3
解决办法
2万
查看次数

如何为C++元组编写折叠/求和函数?

我想编写一个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)

c++ c++11 stdtuple c++17

6
推荐指数
2
解决办法
1600
查看次数

如何在C++中执行元组运算(c ++ 11/c ++ 17)?

我正在尝试编写模板函数/运算符,例如+在两个相同类型的元组之间进行算术运算.例如,对于

std::tuple<int,double> t = std::make_tuple(1,2);
Run Code Online (Sandbox Code Playgroud)

我想做

auto t1 = t + t;  
Run Code Online (Sandbox Code Playgroud)

逻辑很简单:按顺序进行算术运算.但我无法弄清楚如何在c ++模板编程中完成这项工作(c ++ 11/17).我下面的代码不能编译g++ -std=c++11 tuple_arith.cpp.特别是,我无法弄清楚使用泛型add函数(template<typename T> T add(T x, T y) { return x + y; })来处理元组操作代码的正确方法.

有人可以帮助解释如何解决问题吗?

#include <tuple>

namespace std {
  template<typename _Tp, size_t __i, size_t __size, typename _opT >
     struct __tuple_arith {
       static constexpr _Tp  __op(const _Tp& __t, const _Tp& __u, const _opT& op)  {
         return std::tuple_cat(std::make_tuple(op(std::get<__i>(__t), std::get<__i>(__u))
                               , __tuple_arith<_Tp, __i + 1, __size, _opT>::__op(__t, __u))); …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11 stdtuple c++17

5
推荐指数
1
解决办法
693
查看次数

标签 统计

c++ ×3

c++11 ×3

c++17 ×2

stdtuple ×2

c++14 ×1

gcc ×1

variadic-templates ×1