Ich habe eine Klasse mit einer std::map von Zeigern als ein Mitglied. Nun möchte ich dieses Mitglied nur lesend darstellen: Eine Änderung ist weder für die Map noch für die Objekte, auf die gezeigt wird, erlaubt. Intern brauche ich diese Zeiger, um non-const zu sein, und ich möchte sie als const darstellen.
Ich habe eine Lösung, die zumindest kompiliert, aber ich würde gerne wissen, ob es irgendwelche versteckten Probleme gibt, die ich mit diesem laufen wird.
class A
{
public:
const std::map<int, const float*>& GetMap() const { return *(reinterpret_cast< const std::map<int, const float*>* >( &m_Map)); }
private:
std::map<int, float*> m_Map;
};
Es gibt ein mögliches Problem, das ich mir vorstellen kann: Wenn das interne Layout von std::map für Maps von Zeigern und Maps von Const-Zeigern unterschiedlich ist, dann wird dies zu hässlichen Fehlern führen. Aber ich kann mir keinen vernünftigen Grund vorstellen, warum das der Fall sein sollte. Hat irgendjemand eine Idee?
Zur Klarstellung: Ich bin mir bewusst, dass dies ein Hack ist, und es gibt sicherere Lösungen (wie separate Accessor-Funktionen). Ich frage mich nur, ob dies sofort wegen irgendeiner Information, die ich vermisse, brechen würde.