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?


Anmelden zum Antworten