C ++ automatische Aufruffunktion nach Änderungsvariable

8

Gibt es eine Funktion in C ++, die beim Ändern einer Variablen automatisch eine Funktion aufruft?

    
stefan 01.07.2010, 15:17
quelle

7 Antworten

13
  

Gibt es eine Funktion in C ++, die, wenn eine Variable geändert wurde, automatisch eine Funktion aufruft?

Nein, nicht dass ich daran denken könnte. Sie können jedoch den Zugriff auf die Variable in einem geeigneten Wrapper umbrechen, der es Ihnen ermöglicht, in die Zuweisung einzudringen.
Etwas wie das:

%Vor%

Wie Noah in einem Kommentar notierte,

%Vor%

(oder, wenn Ihr Compiler es hat, std::tr1::function oder std::function ) würde dies erheblich verbessern, weil es erlaubt alle Arten von "kompatiblen" Funktionen aufzurufen. (Zum Beispiel aktiviert es alle Arten von Magie mit boost/std::/tr1::bind<> , um Member-Funktionen aufzurufen und was nicht.)

Beachten Sie auch, dass dies, wie adf88 in seinen Kommentaren sagte, genau das tut, wonach es gefragt wurde (Schreibzugriff auf eine Variable überwachen) und es sich keineswegs um eine vollwertige Property-Implementierung handelt. In der Tat, trotz C ++ 'Einstellung, so viel wie möglich in Bibliotheken und so wenig wie möglich in der Sprache zu implementieren, und trotz der Versuche vieler Leute (einige von ihnen ziemlich schlau), hat niemand einen Weg gefunden, Eigenschaften in C ++ zu implementieren als Bibliothek , ohne Unterstützung von der Sprache.

    
sbi 01.07.2010 15:20
quelle
9

In einem Wort; Nein.

Aber was Sie tun sollten, ist die Variable in eine Klasse zu packen (ich werde nicht vorschlagen, dass der Operator überladen wird) und sie über eine set (...) Funktion ändern. Dann rufen Sie einfach die Funktion von der Set-Funktion auf.

    
Viktor Sehr 01.07.2010 15:19
quelle
3

Sie könnten die Variable privat für eine Klasse machen und dann die Elementfunktionen für die Änderung an erster Stelle verwenden.

Sie können Ihren zusätzlichen Code in die Member-Funktion selbst einfügen, oder Sie können diesen Code trennen und die Member-Funktion bei Änderung aufrufen lassen.

    
Platinum Azure 01.07.2010 15:19
quelle
2

Nein, Sie sollten die Variable in ein paar Get / Set-Methoden einkapseln.

    
munissor 01.07.2010 15:19
quelle
1

Abhängig von der Komplexität Ihres Programms können Sie Listener verwenden, die bestimmte Objekte auf Zustandsänderungen überwachen und andere Teile Ihres Programms Ereignisse von diesem Listener abonnieren lassen.

Die beste Option wäre jedoch, diese Funktionalität in die Setter-Methode für diese Variable zu integrieren. Es könnte eine Listener-Funktionalität oder ein direkter Funktionsaufruf sein.

    
corsiKa 01.07.2010 15:21
quelle
0

Sie können diese Variable einkapseln und über Listener verfügen, die benachrichtigt werden, wenn sich der Wert ändert. Ich würde für boost :: signals oder boost :: signals2 gehen:

Ссылка

und hier ein paar Infos zum Beobachtermuster: Ссылка

    
fingerprint211b 01.07.2010 17:01
quelle
0

Wenn die Variable einen Klassentyp hat, können Sie ihre Funktion operator =() überladen. Dies ist nicht möglich, wenn die Variable ein primitiver Typ ist.

    
David R Tribble 01.07.2010 17:13
quelle

Tags und Links