Wie vergleiche ich Tupel für äquivalente Typen, ohne die Reihenfolge zu beachten?

8

Ich suche nach einer Möglichkeit, zwei Tupel zu vergleichen, um festzustellen, ob sie die gleichen Typen enthalten.
Die Reihenfolge der Typen spielt keine Rolle. Solange es eine Eins-zu-Eins-Zuordnung zwischen den Typen der beiden Tupel gibt, werde ich sie als äquivalent betrachten.

Hier ist ein kleiner Test, den ich eingerichtet habe.
Ich habe Probleme bei der Implementierung von equivalent_types() :

%Vor%     
Trevor Hickey 18.10.2016, 21:00
quelle

3 Antworten

2

Wenn Sie beide Arten von Tupeln zählen, können Sie Folgendes tun:

%Vor%

Demo C ++ 1z
Demo C ++ 14

Ich benutze C ++ 1z zum Falten des Ausdrucks, aber es kann leicht als constexpr-Funktion umgeschrieben werden.

    
Jarod42 18.10.2016, 21:33
quelle
2

Mit Hana (in Verbindung mit aktuellen Boost-Versionen) können wir jeden Tupel-Typ in eine Karte von Typ zu Häufigkeit konvertieren und dann diese Karten auf Gleichheit vergleichen:

%Vor%

Beispiel .

Beachten Sie, dass &e als Argument für hana::decltype_ erforderlich ist, um sicherzustellen, dass z. int und int& werden als unterschiedliche Typen behandelt (dito mit Übergabe von e durch universelle Referenz).

    
ecatmur 18.10.2016 22:27
quelle
0

Dieser Code scheint mit den Parametern in beliebiger Reihenfolge zu funktionieren. Das false -Ergebnis ist ein Compilerfehler. Ich bin noch nicht großartig mit TMP, aber es ist 100% Kompilierzeit .. Ich würde gerne einige Vorschläge, wie man das aufräumen. Live: Ссылка

%Vor%     
xaxxon 18.10.2016 21:31
quelle