当前位置:  开发笔记 > 编程语言 > 正文

检查元组类型是否是彼此的子集

如何解决《检查元组类型是否是彼此的子集》经验,为你挑选了1个好方法。

假设我有2个未实例化的元组.有没有惯用的方法来检查一组是否是另一组的子集?

如果这需要另一种类型而不是hana::tuple_c,这也很好.实际上,我目前的输入包括std::tuple,但我不能让它以任何方式工作.

代码,它工作(但我觉得应该有类似的东西可能的):

#include 
using namespace boost;

using SetA = hana::tuple_c;
using SetB = hana::tuple_c;

static_assert(
    hana::is_subset( SetB, SetA ),
    ""
);

我当前的解决方法用于boost::mpl做一个交集,然后比较结果.这有效,但我对一个纯粹的boost::hana解决方案感兴趣:

#include 
using namespace boost;

using SetA = mpl::set;
using SetB = mpl::set;

using Intersection = typename mpl::copy_if<
    SetA,
    mpl::has_key< SetB, mpl::_1 >,
    mpl::back_inserter< mpl::vector<> >
>::type;

// since Intersection is a vector, subset also needs vector type
using Subset = typename mpl::copy<
    SetB,
    mpl::back_inserter< mpl::vector<> >
>::type;

static_assert(std::is_same::value, "");

Vittorio Rom.. 10

你没有boost::hana正确使用.这将有效:

#include 
using namespace boost;

constexpr auto setA = hana::tuple_t;
constexpr auto setB = hana::tuple_t;

// Is `setB` a subset of `setA`? (Yes.)
static_assert(hana::is_subset(setB, setA), "");

// Is `setA` a subset of `setB`? (No.)
static_assert(!hana::is_subset(setA, setB), "");

说明:

hana::tuple_thana::type_c对象元组的简写符号.

auto x = hana::tuple_t;
// ...is equivalent to...
auto x = hana::make_tuple(hana::type_c, hana::type_c);

hana::type_c 对象将类型包装为值.

hana::is_subset(a, b)检查if是否a是一个子集b,而不是反之(你在检查是否ba你问题的一个子集).



1> Vittorio Rom..:

你没有boost::hana正确使用.这将有效:

#include 
using namespace boost;

constexpr auto setA = hana::tuple_t;
constexpr auto setB = hana::tuple_t;

// Is `setB` a subset of `setA`? (Yes.)
static_assert(hana::is_subset(setB, setA), "");

// Is `setA` a subset of `setB`? (No.)
static_assert(!hana::is_subset(setA, setB), "");

说明:

hana::tuple_thana::type_c对象元组的简写符号.

auto x = hana::tuple_t;
// ...is equivalent to...
auto x = hana::make_tuple(hana::type_c, hana::type_c);

hana::type_c 对象将类型包装为值.

hana::is_subset(a, b)检查if是否a是一个子集b,而不是反之(你在检查是否ba你问题的一个子集).

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有