C++ 将选定数量的参数包传递/转发给另一个函数

C++ 将选定数量的参数包传递/转发给另一个函数,c++,c++11,template-meta-programming,C++,C++11,Template Meta Programming,从这一点出发,我发现了一个参数包的唯一值的数量,这让我想到,如果将选定数量的可变参数包传递/转发给另一个函数或返回它们是可行的,例如,假设我们有一个采用齐次包的结构 template<size_t ... Rest> struct my_struct; 例如: my_struct<0,5,2,0,4,2> a; my_struct<0,5,2,4> b = foo(a); myu结构a; 我的结构b=foo(a); 对值进行排序,在这里没有任何意义。仅使

从这一点出发,我发现了一个参数包的唯一值的数量,这让我想到,如果将选定数量的可变参数包传递/转发给另一个函数或返回它们是可行的,例如,假设我们有一个采用齐次包的
结构

template<size_t ... Rest>
struct my_struct;
例如:

my_struct<0,5,2,0,4,2> a;
my_struct<0,5,2,4> b = foo(a);
myu结构a;
我的结构b=foo(a);

对值进行排序,在这里没有任何意义。仅使用标准库是否可以实现此功能

只需在另一个元函数中包装
uniques
。就在我的


通过您的
示例进行操作

  • 首先,我们将所有这些数字包装成类型,得到一个
    typelist
    (我只是用
    I
    作为缩写,意思是它是一个
    std::integral\u常量
  • 接下来,我们将其包装在
    uniq\u t
    中,这将生成
    类型列表
  • 接下来,我们将其传递到
    apply\u typelist
    中,它为我们提供了类型
    quote\u c::apply
  • 根据需要,它本身是my_struct的别名
    我认为函数
    foo
    签名中的位应该修改为
    quote_c
    ,而不仅仅是
    quote_c
    @romeric谢谢,修正了。
    my_struct<0,5,2,0,4,2> a;
    my_struct<0,5,2,4> b = foo(a);
    
    template <class T, template <T...> class Z>
    struct quote_c {
        template <class... Ts>
        using apply = Z<Ts::value...>;
    };
    
    template <class MFC, class TL>
    struct apply_typelist;
    
    template <class MFC, class TL>
    using apply_typelist_t = typename apply_typelist<MFC, TL>::type;
    
    
    template <class MFC, class... Ts>
    struct apply_typelist<MFC, typelist<Ts...>> {
        using type = typename MFC::template apply<Ts...>;
    };
    
    template <class T, T... Vals>
    using typelist_c = typelist<std::integral_constant<T, Vals>...>;
    
    template <size_t N,
              size_t ... Rest,
              class R = apply_typelist_t<quote_c<size_t, my_struct>,
                            uniq_t<typelist_c<size_t, N, Rest...>>>
              >
    R foo(const my_struct<N,Rest...> &a) {
        // ...
    }