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


Anmelden zum Antworten