#pragma once //#include #include namespace rp { namespace mixin { class observable { public: virtual ~observable() {} virtual void update() = 0; }; class subjectable { public: subjectable() {} virtual ~subjectable() {} virtual void attach( observable* observer ) { m_observers.push_back( observer ); } virtual void detach( observable* observer ) { m_observers.erase( std::remove( m_observers.begin(), m_observers.end(), observer ), m_observers.end() ); } virtual void notify() { std::for_each( m_observers.begin(), m_observers.end(), std::mem_fun( &observable::update ) ); } private: std::vector< observable* > m_observers; }; } // mixin } // rp