Ich müsste eine Klasse mit einem überladenen Operator [] schreiben, der ein anderes Verhalten hat, wenn der Operator [] zum Lesen oder Schreiben von Daten verwendet wird. Um ein praktisches Beispiel zu geben, was ich erreichen möchte, muss ich sagen, dass ich die Implementierung einer Klasse namens PhoneBook schreiben muss, die auf folgende Weise verwendet werden kann:
%Vor%Das Problem liegt in der Tatsache, dass bei Verwendung von
%Vor%Ich möchte keinen Eintrag im Telefonbuch für Frank hinzufügen, sonst wäre eine auf std :: map basierende Lösung einfach zu implementieren.
Ich habe im Internet keinen Standard gefunden, um dies zu erreichen Nach einigem Nachdenken kam ich zu der folgenden Lösung, bei der der Operator [] ein "temporäres Objekt" namens PhoneNumber zurückgibt. PhoneNumber wird dann verwendet, um zwischen Lese- / Schreiboperationen zu unterscheiden:
%Vor%Die Klasse PhoneBook verhält sich wie ich möchte und das Programm druckt:
%Vor%Ich möchte Ihnen einige Fragen stellen:
In der Bibliothek schreibe ich und aktiviere das Verhalten, das ich für PhoneBook :: operator [] erhalten habe in einer ähnlichen Situation ist wirklich wichtig und ich würde gerne wissen, was Sie über mein Problem denken.
Danke!
Was Sie vorschlagen, ist die Standardlösung für dieses Problem. Es ist normalerweise
bekannt als Proxy-Muster oder Proxy-Idiom und die Hilfsklasse, die Sie
Rückkehr wird als Proxy bezeichnet. (Da es sich um eine geschachtelte Klasse handelt, rufen Sie einfach auf
it Proxy
ist im Allgemeinen ausreichend.)
Ich denke, Sie können zwei Versionen von operator [] implementieren, einen mit const-Modifikator und den anderen ohne. Wenn Sie dann ein Objekt sagen PhoneBook phoneBook(999999);
, das If phoneBook ist const Objekt, kann nur operator [] const
aufgerufen werden. Wenn phoneBook ein nicht-konstantes Objekt ist, wird standardmäßig operator []
aufgerufen. Wenn Sie operator [] const
für ein nicht-konstantes Objekt aufrufen möchten, können Sie eine Umwandlung wie static_cast<const PhoneBook&>(phoneBook)->operator[...]
hinzufügen.
Tags und Links c++