Beachten Sie das folgende Programm, in dem eine Funktion sowohl den erwarteten Typ als auch einen Typ akzeptiert, der ein typedef dieses Typs ist.
%Vor%Wie Sie sehen, unterscheidet ein typedef nicht wirklich einen neuen Typ. Ich dachte stattdessen, vom Typ zu erben:
%Vor% Gleiches Problem.
Wenn ich Boost anschaue, habe ich versucht, einen starken typedef auszuprobieren:
Fehler kompilieren:
%Vor% Scheinbar funktioniert BOOST_STRONG_TYPEDEF nur bei primitiven Typen.
Ich habe versucht, die Vererbung erneut auszuführen, stoppe aber die implizite Konvertierung:
Das hat auch nicht funktioniert.
Fragen:
BOOST_STRONG_TYPEDEF nimmt tatsächlich an, dass Typen gleichberechtigt sind ( ==
), zuweisbar ( =
) und weniger als vergleichbar ( <
).
Wenn Ihr Typ nicht vorhanden ist, führt das Makro zu Code, der nicht kompiliert wird, wie Sie gesehen haben. Sie können ein eigenes Makro rollen oder Implementierungen für die erforderlichen Vorgänge bereitstellen.
Sie finden eine CUSTOM_STRONG_TYPEDEF
in dieser Antwort vom Februar 2012: Verwendung von Vergleichsoperatoren bei Varianten mit enthaltenen Typen? , wodurch das Standardvergleichsverhalten ausdrücklich vermieden wird
Aktualisieren Das Beispiel wurde für Ihren Anwendungsfall expliziter gemacht, sehen Sie Live On Coliru
%Vor% Vielleicht könnten Sie private Vererbung und einige using
s verwenden?