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
我认为函数
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) {
// ...
}