get part of std::tuple

前端 未结 7 1187
没有蜡笔的小新
没有蜡笔的小新 2020-12-02 23:09

I have a tuple of unknown size (it\'s template parametr of method)

Is it way to get part of it (I need throw away first element of it)

For example, I have

相关标签:
7条回答
  • 2020-12-03 00:08

    There may be an easier way, but this is a start. The "tail" function template returns a copied tuple with all values of the original except the first. This compiles with GCC 4.6.2 in C++0x-mode.

    template<size_t I>
    struct assign {
      template<class ResultTuple, class SrcTuple>
      static void x(ResultTuple& t, const SrcTuple& tup) {
        std::get<I - 1>(t) = std::get<I>(tup);
        assign<I - 1>::x(t, tup);
      }
    };
    
    template<>
    struct assign<1> {
      template<class ResultTuple, class SrcTuple>
      static void x(ResultTuple& t, const SrcTuple& tup) {
        std::get<0>(t) = std::get<1>(tup);
      }
    };
    
    
    template<class Tup> struct tail_helper;
    
    template<class Head, class... Tail>
    struct tail_helper<std::tuple<Head, Tail...>> {
      typedef typename std::tuple<Tail...> type;
      static type tail(const std::tuple<Head, Tail...>& tup) {
        type t;
        assign<std::tuple_size<type>::value>::x(t, tup);
        return t;
      }
    };
    
    template<class Tup>
    typename tail_helper<Tup>::type tail(const Tup& tup) {
      return tail_helper<Tup>::tail(tup);
    }
    
    0 讨论(0)
提交回复
热议问题