[C++] Zuweisungskompatiblität von Typen verbieten

7H3 N4C3R

Lt. Commander
Registriert
Feb. 2002
Beiträge
1.816
Hi!

Ich habe ein Problem. Am besten erklärt sich das wohl an diesem Beispiel-Code-Schnipsel:

Code:
typedef int Feldstaerke;
typedef int Koordinate;

Folgendes geht am Compiler aber ohne Warning oder sonstwas vorbei (ist ja eigentlich auch C++-Standard):

Code:
	FeldStaerke f = 0;
	Koordinate k = 1; // muss keinen Sinn machen ;)

	k = f;

Um den semantischen Sinn zu verdeutlichen, will ich solche Zuweisungen aber verbieten.

Meine erste Überlegung war, ein kleines Template um den Datentyp zu schreiben, dass alle relevanten Operatoren überlädt und sich somit transparent verhält, aber solche Zuweisungen verbietet. Die Lösung gefällt mir aber nicht so sehr, da es möglicherweise unnötigen Overhead erzeugt (auch inline - sofern das geht). Kennt jemand vielleicht einen besseren Weg?
 
Zuletzt bearbeitet:
Da musst du wohl oder übel entweder Klassen draus machen oder structs mit int values. Dann kannst du sie nur über einen type-cast wieder gegenseitig zuweisen.
 
Ich habe mal beide Versionen umgesetzt. Mit Optimierung ist das Kompilat fast das selbe. Allerdings immernoch ein Overhead, der einem die Haare zu Berge stehen lässt.

Einziger Gedanke von mir wäre derzeit, zum Debuggen die Klassen zu verwenden und sie dann für die Releaseversion, wenn alles kompiliert, einfach gegen ints auszutauschen.

Dachte, dass man an der Stelle eigentlich noch irgendwas mit 'Template Magic' bastln könnte... vielleicht fällt mir ja noch was anderes ein. :)
 
Zurück
Oben