codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <vector> using namespace std; class IMessageListener { public: friend void SendMessage(const std::string& message); IMessageListener(); virtual ~IMessageListener(); protected: virtual void handle(const std::string& message)=0; void hoge(){}; }; typedef std::vector<IMessageListener*> MessageListenerList; typedef MessageListenerList::iterator MessageListenerListIt; namespace { MessageListenerList messageListenerList_; } IMessageListener::IMessageListener() { messageListenerList_.push_back(this); } IMessageListener::~IMessageListener() { messageListenerList_.erase(remove(messageListenerList_.begin(), messageListenerList_.end(), this), messageListenerList_.end()); } class Hoge : public IMessageListener { public: Hoge(int value) : value_(value) { } protected: virtual void handle(const std::string& message) { cout << "Hoge(" << value_ << ")::handle" << message << endl; } private: int value_; }; class Foo : public IMessageListener { protected: virtual void handle(const std::string& message) { cout << "Foo::handle:" << message << endl; } }; class Bar : public IMessageListener { public: Bar() : foo_(new Foo()) { } virtual ~Bar() { delete foo_; } protected: virtual void handle(const std::string& message) { cout << "Bar::handle:" << message << endl; } private: Foo* foo_; }; void SendMessage(const std::string& message) { for_each( messageListenerList_.begin(), messageListenerList_.end(), boost::bind(&IMessageListener::handle,_1,boost::ref(message)) ); } int main() { { Bar bar; Hoge hoge(0); Hoge hoge2(1); Hoge hoge3(2); Hoge hoge4(3); Hoge hoge5(4); Hoge hoge6(5); ::SendMessage("test"); cout << "--------------------" << endl; ::SendMessage("test2"); } cout << "--------------------" << endl; ::SendMessage("test3"); }
Private
[
?
]
Run code
Submit