Angenommen, ich habe 2 Tupel, die nicht instanziiert werden. Gibt es einen idiomatischen Weg, um zu überprüfen, ob eine Menge die Untermenge der anderen Menge ist?Überprüfen, ob Tupeltypen Teilmengen voneinander sind
Wenn dies einen anderen Typ als hana::tuple_c
erfordert, ist das auch in Ordnung. Eigentlich besteht meine aktuelle Eingabe aus std::tuple
, aber ich konnte es nicht in beide Richtungen arbeiten.
Code, der tut NICHT Arbeit (aber ich fühle mich wie sollte es etwas ähnliches möglich sein):
#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),
""
);
Meine aktuelle Problemumgehung verwendet boost::mpl
eine Kreuzung zu tun und dann die Ergebnisse vergleichen. Dies funktioniert, aber ich habe Interesse an einer reinen boost::hana
Lösung:
#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, "");