In Grafiken sind alle geometrischen Datentypen sehr ähnlich. Um Code-Duplikation zu vermeiden, aber dennoch einen Sinn darin zu haben, empfiehlt der Graphics Codex, eine Vector
Klasse mit mehreren Typedefs für Points
, Normals
und Directions
zu verwenden.Typspezifische Typen erzwingen
über die Unterzeichnung So basiert der Normalize
Funktion (wie geschrieben steht), weiß man, er mit Directions
und nicht Points
oder Normals
handelt. Natürlich verhindert nichts, dass Sie eine Point
oder Normal
übergeben, da sie alle Vectors
(nur Aliase) sind. Ich frage mich, ob es eine nicht-overhead Möglichkeit gibt, den Programmierer (dh Compiler-Warnstufe 4) zu zwingen, etwas zu übergeben, das explizit Direction
deklariert wird (ohne die Struktur Vector
mehrfach in verschiedenen Strukturen zu vererben oder mehrmals aus der Struktur Vector
zu erben) und wenn nicht, muss der Programmierer eine explizite Besetzung machen (was nur ein Noop ist)? (Haskell zum Beispiel hat diese Funktionalität)
struct Vector {
// lots of methods
float x, y, z;
};
typedef Vector Point;
typedef Vector Direction;
typedef Vector Normal;
Normal Normalize(const Direction &) {
...
}
Schauen Sie sich ** starke typef ** an. – Jarod42