我想知道是否可以过滤传递给可变参数模板的类型(基于 predicate 模板),以生成另一个包含满足 predicate 的类型的可变参数模板:
/** Filter a parameter pack */
template <template <class> class,
template <class...> class,
class...>
struct filter;
template <template <class> class Pred, template <class...> class Variadic>
struct filter<Pred, Variadic> : Variadic<>
{};
template <template <class> class Pred,
template <class...> class Variadic,
class T, class... Ts>
struct filter<Pred, Variadic, T, Ts...>
{
// FIXME: this just stops at first T where Pred<T> is true
using type = typename std::conditional<
Pred<T>::value,
Variadic<T, Ts...>, // can't do: Variadic<T, filter<...>>
filter<Pred, Variadic, Ts...> >::type;
};
字符串
正如您所看到的,我还没有找到一种方法来从其余的过滤类型中“提取”参数包。
提前感谢!
1条答案
按热度按时间7hiiyaii1#
这应该是相当直接的。在心脏你应该有这样的东西:
字符串
您只需要
Cons<T, Tuple>
,它将T, std::tuple<Args...>
转换为std::tuple<T, Args...>
,并且您需要传递 predicate 沿着(作为练习)。Cons
可能如下所示:型
filter<Args...>::type
的结果将是std::tuple<Brgs...>
,其中Brgs...
是一个包,仅由Args...
中 predicate 成立的那些类型组成。