von nicht-const nach const
-
Hi,
ich habe ein
set<const Square*> squaresWithFoes;
und eine Methode
set<Square*> getBlackPiecedSquares()
nun versuche ich eine Zuweisung:
squaresWithFoes = board->getBlackPiecedSquares();
Dies geht aber nicht. Wohl weil es für std::set keine entsprechende Operatiorüberladung für = von nicht const nach const gibt.
Schade eigentlich, schließlich müsste es doch unproblematisch sein, von nicht const nach const zu gehen.
Hat jemand eine Idee, wie ich die Zuweisung am besten hinbekomme?
-
Du musst wohl alle Pointer kopieren, finde das auch nervig.
set<Square*> NonConst = getBlackPiecedSquares(); squaresWithFoes = set<const Square*>( NonConst.begin(), NonConst.end() );
-
Oder du castest. Wozu brauchst du das?
-
erst mal danke für die beiden ideen.
das mit dem casten funktioniert irgendwie nicht. Wenn ich einfach (set<const Square*>) davor schreibe, klappt das irgendwie nicht - hört sich auch etwas unmöglich an, bei einem container, oder?
bezgl. der zweiten antwort:
wozu brauchst du das?
wozu brauche ich was?
-
Bit2_Gosu schrieb:
wozu brauche ich was?
Einen Container mit konstanten Daten.
-
Tjo, leider aus folgendem Grund:
ich hatte ein
map<Square*, bool> preSquares
und rufe auf:
preSquares.find(square)
, wobei square ein
const Square*
ist, der meiner Methode als Argument übergeben wird.
Leider gibt es die Methode find nur für Square*, weil das der Template Parameter für die map ist. Deshalb meckert der Compiler mit
error: invalid conversion from ‘const Square*’ to ‘Square*’
Deshalb war meine Idee, die Variable preSquares zu einer map<const Square*, bool> zu machen.
Ich meine, wenn ihr eine bessere Idee habt, freu ich mich natürlich.
-
Du kannst nur
const
-Qualifizierer hinzufügen. Das sollte mitstd::copy()
gehen, eventuell auch mit einer Iterationsschleife durch den Container.
-
Bit2_Gosu schrieb:
Leider gibt es die Methode find nur für Square*, weil das der Template Parameter für die map ist.
Für einen solchen Fall könnte man ausnahmsweise auch mal den const_cast bemühen.
-
jo, ich machs jetzt auch mit const_cast.
Ist am einfachsten und auch ungefährlich, weil die constness nur in der Methode entfernt ist und ich dort nicht schreibend zugreife.Vielen Dank für eure Tipps!
-
Bit2_Gosu schrieb:
Ist am einfachsten und auch ungefährlich, weil die constness nur in der Methode entfernt ist und ich dort nicht schreibend zugreife.
Ändere die Methode, dass sie const benutzt/zurückgibt.