chromium之observer_list
典型用法如下
/////////////////////////////////////////////////////////////////////////////// // // OVERVIEW: // // A container for a list of observers. Unlike a normal STL vector or list, // this container can be modified during iteration without invalidating the // iterator. So, it safely handles the case of an observer removing itself // or other observers from the list while observers are being notified. // // TYPICAL USAGE: // // class MyWidget { // public: // ... // // class Observer { // public: // virtual void OnFoo(MyWidget* w) = 0; // virtual void OnBar(MyWidget* w, int x, int y) = 0; // }; // // void AddObserver(Observer* obs) { // observer_list_.AddObserver(obs); // } // // void RemoveObserver(Observer* obs) { // observer_list_.RemoveObserver(obs); // } // // void NotifyFoo() { // FOR_EACH_OBSERVER(Observer, observer_list_, OnFoo(this)); // } // // void NotifyBar(int x, int y) { // FOR_EACH_OBSERVER(Observer, observer_list_, OnBar(this, x, y)); // } // // private: // ObserverList<Observer> observer_list_; // }; // // ///////////////////////////////////////////////////////////////////////////////