相关疑难解决方法(0)

检查一组类型是否是另一组的子集

如何检查一个参数包(解释为一组)是否是另一个参数包的子集?

到目前为止,我只有框架(使用std :: tuple),但没有功能.

#include <tuple>
#include <type_traits>

template <typename, typename>
struct is_subset_of : std::false_type
{
};

template <typename ... Types1, typename ... Types2>
struct is_subset_of<std::tuple<Types1...>, std::tuple<Types2...>>
    : std::true_type
{
    // Should only be true_type if Types1 is a subset of Types2
};

int main() {
    using t1 = std::tuple<int, double>;
    using t2 = std::tuple<double, int>;
    using t3 = std::tuple<int, double, char>;

    static_assert(is_subset_of<t1, t1>::value, "err");
    static_assert(is_subset_of<t1, t2>::value, "err");
    static_assert(is_subset_of<t2, t1>::value, "err");
    static_assert(is_subset_of<t2, t3>::value, "err");
    static_assert(!is_subset_of<t3, t2>::value, "err");
}
Run Code Online (Sandbox Code Playgroud)

每个类型不允许在一个集合中出现多次.

如果解决方案适用于C++ …

c++ templates template-meta-programming variadic-templates c++11

17
推荐指数
2
解决办法
2371
查看次数