mit konstruktor werte ausschließen ?
-
hallo,
ich habe einen Konstruktor deklariert und definiert.
beispiel(int a=1);
beispiel::beispiel(int a=1)
{
if (a==2)
{
????????
}
wert=a;
}main ()
{
beispiel eins(); //wert wird mit 1 initialisiert
beispiel zwei(7); //wert wird mit 7 initialisiert
beispiel drei(2);
//Objekt drei der klasse beispiel soll nicht deklariert werden
}meine frage:
Wie muss ich den Konstruktor definieren, damit ich bei einem bestimmten wert eine Deklaration des Objektes verhindern kann ?danke!!!
-
Wenn du verhindern willst, dass das Objekt auf dem Speicher angelegt wird, geht das so, per Konstruktor, nicht. Der Konstruktor wird erst aufgerufen, nachdem das Objekt auf dem Speicher angelegt wurde.
Du könntest allerdings ein assert reinschreiben. Dann bricht das Programm im Debug Modus ab, wenn a == 2 ist. Im Release Modus bekommst du davon nichts mehr zu sehen.
#include <cassert> beispiel(int a=1); beispiel::beispiel(int a) : wert(a) // RAII { assert(a != 2); }
-
du könntest eine exception werfen:
beispiel::beispiel(int a=1) : wert( a ) { if (a==2) throw irgendeine_exception(); }
damit ist ein solches objekt nicht mehr mit ungültigen werten initialisierbar.
-
vielleicht kann dir auch zur compilezeit gehelft werden. ich denke da zuerst an enum, dann an proxies als konstruktorargument und dann an selbiges mit ein wenig compilezeitmathe gewürzt.
aber sage uns doch konkret die erlaubten und die verbotenen werte, damit wir eine einfache lösung suchen können. es gibt nämlich keine allgemeingültige einfache lösung und an einer allgemeingültigen echt komplizierten lösung würdest du das interesse sehr schnell verlieren.
-
@all:
schon mal besten dank für Eure Mühen !also ich will eigenlich nur den wert 0 (null) ausschließen
-
Ganz nach camper exception werfen bei a == 0.