Powiedz, że mam 2 krotki, które nie są instancjami. Czy istnieje idiomatyczny sposób sprawdzenia, czy jeden zestaw jest podzbiorem drugiego?Sprawdź, czy typy krotek są podzbiorami względem siebie.
Jeśli to wymaga innego typu niż hana::tuple_c
, również jest w porządku. W rzeczywistości mój bieżący wkład składa się z std::tuple
, ale nie mogłem go uruchomić w żaden sposób.
Code że nie pracy (ale czuję się jak nie powinno być coś podobnego to możliwe):
#include <boost/hana.hpp>
using namespace boost;
using SetA = hana::tuple_c<int, char, float>;
using SetB = hana::tuple_c<int, float>;
static_assert(
hana::is_subset(SetB, SetA),
""
);
Moje bieżące obejście wykorzystuje boost::mpl
zrobić skrzyżowanie, a następnie porównać wyniki. To działa, ale jestem zainteresowany w czystej boost::hana
rozwiązanie:
#include <boost/mpl.hpp>
using namespace boost;
using SetA = mpl::set<int, char, float>;
using SetB = mpl::set<int, float>;
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<Intersection, Subset>::value, "");