Gibt es ein Idiom für eine strikte typedef in C++, möglicherweise mit Vorlagen?Idiom für strikt typedef in C++
Etwas wie:
template <class base_type, int N> struct new_type{
base_type p;
explicit new_type(base_type i = base_type()) : p(i) {}
};
typedef new_type<int, __LINE__> x_coordinate;
typedef new_type<int, __LINE__> y_coordinate;
Also habe ich so etwas wie dies eine Kompilierung Fehler machen kann:
x_coordinate x(5);
y_coordinate y(6);
x = y; // whoops
Die __LINE__
in sieht es wie es Schwierigkeiten geben könnte, aber ich würde es vorziehen, nicht um eine Reihe von Konstanten manuell zu erstellen, nur um jeden Typ einzigartig zu halten.
Koordinaten sind nicht eine sehr gute Anwendung für diese. Ein Produkt aus zwei Koordinaten ist keine Koordinate usw. Sie können stattdessen Boost.Units betrachten. –
Ich habe meine Antwort gelöscht, die [BOOST_STRONG_TYPEDEF] (http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/strong_typedef.html) vorgeschlagen hat, weil das anscheinend für die Überladungsauflösung funktioniert, aber keine Kompilierung generiert Fehler bei der Querzuweisung. – Angew
Ich frage den Wert von was Sie tun möchten. Was passiert, wenn Sie zum Beispiel eine Rotation durchführen wollen? 'x = sin (theta) * y + cos (theta) * x' sollte vollständig gültig sein. –