codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include "boost/pointer_cast.hpp" using boost::shared_ptr; using boost::dynamic_pointer_cast; class IMessageHandler; class Message { public: virtual ~Message(){} }; class IMessageHandler { public: virtual bool handleMessage( shared_ptr<Message> msg )=0; }; class BadNews : public Message{}; class YouWereAdopted : public BadNews{}; class GoodNews: public Message{}; class YouWonTheLottery : public GoodNews{}; class TabloidNews : public Message { public: }; class InaneDrivel : public TabloidNews{}; class NewsMessageHandler : public IMessageHandler { public: virtual bool handleMessage( shared_ptr<Message> msg ) { shared_ptr<BadNews> bad; shared_ptr<GoodNews> good; shared_ptr<TabloidNews> tabloid; if( bad = dynamic_pointer_cast<BadNews>(msg) ) { cout<<"Sorry, you got some bad news"<<endl; return true; } else if( tabloid = dynamic_pointer_cast<TabloidNews>(msg) ) { cout<<"Sorry, you got some tabloid news"<<endl; return true; } else if( good = dynamic_pointer_cast<GoodNews>(msg) ) { cout<<"You got some good news"<<endl; return true; } return false; } }; int main() { shared_ptr<NewsMessageHandler> h( new NewsMessageHandler() ); shared_ptr<Message> b ( new BadNews() ); shared_ptr<Message> g ( new GoodNews() ); shared_ptr<Message> t ( new TabloidNews() ); shared_ptr<Message> lottery ( new YouWonTheLottery() ); shared_ptr<Message> adopted ( new YouWereAdopted() ); shared_ptr<Message> drivel ( new InaneDrivel() ); h->handleMessage(b); h->handleMessage(g); h->handleMessage(t); h->handleMessage(adopted); h->handleMessage(lottery); h->handleMessage(drivel); }
Private
[
?
]
Run code
Submit