首页 > 解决方案 > 参数包中的过滤器类型

问题描述

我正在尝试创建可变参数模板/参数包的过滤类型并保留排序。

// example what im trying to accomplish
template<typename... Args>
struct query
{
    using filtered = typename filtered<std::is_integral_v, Args...>
}

在此示例中,过滤将过滤所有整数类型,例如。

query<int, A, B>::filtered == query<A, B>::filtered

我怎样才能创建一个这样的工具或能达到相同结果的东西

标签: c++variadic-templatestemplate-meta-programmingc++20parameter-pack

解决方案


使用Boost.Mp11,这是一个简短的单行(一如既往):

using filtered = mp_filter<std::is_integral, mp_list<Args...>>;

请注意,如果您希望这是一个std::tuple,那就是:

using filtered = mp_filter<std::is_integral, std::tuple<Args...>>;

推荐阅读