6 Stimmen

Wie kann man eine Karte von Zeigern als eine Karte von const-Zeigern darstellen?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X