OnChange Überwachung auf Variable ?
-
Könnte man da was schreiben ?
Eine Klasse, die ein Pointer überreicht bekommt und bei Änderung der Variable eine Prozedur aufruft ?
Mir fällt da nix gescheites zu ein, außer Timer (fraglich ob das gescheit ist)
-
Einfach immer, wenn du die Variable überschreibst, testen, ob der Wert sich geändert hat und dann deine Prozedur ausführen oder eben nicht..
-
Tim06TR schrieb:
Könnte man da was schreiben ?
Nein. Benutze Properties und Setter anstelle von Variablen.
-
template<typename T> class ObservableVariable { typedef void (__closure* ChangeEvent)( const T& OldValue, const T& NewValue ); T Value_; ChangeEvent OnChange_; public: ObservableVariable() : OnChange_( 0 ) { } ObservableVariable( const ObservableVariable& op ) : Value_( op.Value ), OnChange_( op.OnChange ) { } ObservableVariable( const T& op ) : Value_( op ), OnChange_( 0 ) { } ObservableVariable& operator=( const ObservableVariable& op ) { if( this != &op ) { Value_ = op.Value; OnChange_ = op.OnChange; } return *this; } ObservableVariable& operator=( const T& op ) { set_value( op ); return *this; } operator T() { return Value; } operator T() const { return Value; } __property T Value = { read=Value_ , write=set_value }; __property ChangeEvent OnChange = { read=OnChange_, write=OnChange_ }; private: void set_value( const T& op ) { if( op != Value ) { if( OnChange ) { OnChange( Value, op ); } Value_ = op; } } };
Mit boost::function könnte man die Ereignis Schnittstelle noch flexibler gestalten, aber als first shot sollte das Beispiel schon ganz gut funktionieren.
-
teste ich später, aber was ist:
__closure* ? (Ich lerne ja noch)
-
Tim06TR schrieb:
teste ich später, aber was ist:
__closure* ? (Ich lerne ja noch)http://docwiki.embarcadero.com/RADStudio/de/Schlüsselwort-Erweiterungen_in_C++#__closure