Rachus: Wann ist ein const_cast angebracht?

Beitrag lesen

Hallo,

es hat jetzt zwar nicht unbedingt irgendetwas mit Webprogrammierung zu tun, aber ich denke, dass ich in diesem Forum trotzdem richtig aufgehoben bin.

Mein Anliegen ist eine C++-Klasse, die ich zum Wrappen der std::unordered_multimap nutzen wollte. Dabei wollte ich die Schlüssel nicht direkt in der Tabelle speichern, sondern nur einen Pointer. Der Schlüssel selbst liegt in einer anderen Datenstruktur (einer std::list; damit wird bei mehreren Werten eines Schlüssels der Schlüssel trotzdem garantiert nur einmal gespeichert). Nun sieht eine Funktion beispielsweise so aus (ist hoffentlich selbsterklärend):

template<class Key, class Value, class Hash, class Equals>
inline const bool
UM_Wrapper<Key, Value, Hash, Equals>::key_exists(const Key& key) const
{
return data.find(&key) != data.end();
}

Nur habe ich nun das Problem, dass ich gerne eine saubere Schnittstelle einhalten möchte, nämlich das der Schlüssel, den ich erhalte, konstant ist. Das bewirkt allerdings, dass die Zusicherung bei "data.find(&key)" nicht mehr gilt, da hier nur zugesichert wird, dass der Pointer konstant ist, allerdings nicht, dass auch der Speicherbereich, auf den gezeigt wird, konstant ist.
Das könnte man allerdings durch einen Cast lösen:

return data.find(const_cast<Key*>(&key)) != data.end();

Leider liest man aber im Internet viel zu häufig, dass const_cast (genauso, wie reinterpret_cast) "böse" wären und meist auf ein schlechtes Konzept hindeuten. Nun stelle ich mir die Frage, ob in so einem Falle der Cast angebracht ist, oder ob ich meine Klasse überdenken sollte.

Was ist denn Eure Meinung dazu?

Schönen Abend,

Rachus