c++ - 如何从元组 C++ 中过滤重复类型

标签 c++ tuples metaprogramming

如何过滤元组中的重复类型?

例如:

using Tuple = std::tuple<int, double, int, double, std::string, std::string>
using FilteredTuple = without_duplicates<Tuple>;

其中 without_duplicates 的实现方式是生成以下 FilteredTuple 类型:

std::tuple<int, double, std::string>

最佳答案

#include <type_traits>
#include <tuple>

template <typename T, typename... Ts>
struct unique : std::type_identity<T> {};

template <typename... Ts, typename U, typename... Us>
struct unique<std::tuple<Ts...>, U, Us...>
    : std::conditional_t<(std::is_same_v<U, Ts> || ...)
                       , unique<std::tuple<Ts...>, Us...>
                       , unique<std::tuple<Ts..., U>, Us...>> {};

template <typename... Ts>
using unique_tuple = typename unique<std::tuple<>, Ts...>::type;

DEMO

关于c++ - 如何从元组 C++ 中过滤重复类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941964/

相关文章:

c++ - std::make_from_tuple 在没有构造函数的情况下无法编译

c++ - 在 unsigned long long 上编译时间模板化 C++ 计算? double ?

c++ - 收集稍后应在宏中调用的函数列表

c++ - Boost将单调时钟用作日志时间戳

c++ - 如何用 Armadillo 加载matlab矩阵?

python - 从元组中删除元素

typescript - 如何输入对应类型的元组数组?

c++ - 是否可以在编译时检测函数是否被调用

javascript - 使用 Proxy 对象时如何将参数捕获到目标方法?

c++ - 二进制到文本编码、非打印字符、 Protocol Buffer 、mongodb 和 bson