Generischer Integer mit Wertebereich: Illegale Zuweisung soll zur Compilezeit fehlschlagen
-
Angenommen ich habe eine Klasse
template <long MIN,long MAX> class Integer {...}Sie soll nur Zahlen im Bereich zwischen MIN und MAX zulassen.
Gibt es eine Möglichkeit, dass folgender Code bereits zur Compilezeit einen Fehler verursacht?
Integer<3,4> i; i = 5;D.h. ich möchte bereits zur Compilezeit einen Fehler bekommen wenn ein illegaler Wert zugewiesen wird.
Ich möchte es nach Möglichkeit vermeiden die 5 irgendwie zu "codieren". (z.B. mit Int2Type)
-
mondesser schrieb:
Gibt es eine Möglichkeit, dass folgender Code bereits zur Compilezeit einen Fehler verursacht?
Integer<3,4> i; i = 5;Nein.
-
Wenn, dann unter Verwendung einer static assertion in einem Template:
Integer<3, 4> i; i.assign<5>();
-
brotbernd schrieb:
Wenn, dann unter Verwendung einer static assertion in einem Template:
Integer<3, 4> i; i.assign<5>();Hmm schade, genau solch einen Umweg wollte ich eigentlich vermeiden.
Ich probier nochmal ein Bisschen rum, vlt. finde ich noch einen Weg.
-
mondesser schrieb:
Ich probier nochmal ein Bisschen rum, vlt. finde ich noch einen Weg.
Gibt es nicht. Der Wert des int-Literals wird zur Compilezeit nicht ausgewertet, d.h. es gibt zur Copilezeit in dem Kontext der Zuweisung/Initialisierung keinen Unterschied zwischen 5 und 4. Damit kannst du auch kein unterschiedliches Compilezeitverhalten erzeugen.
-
Evtl lässt sich da was mit constexpr aus C++0x machen?