RE: [Boost-users] polymorphic container/boost::any
Use std::listboost::shared_ptr I hope I spelled all that correctly. ++PLS -----Original Message----- From: goochrules! [mailto:goochrules@gmail.com] Sent: Thursday, August 12, 2004 2:02 PM To: boost-users@lists.boost.org Subject: [Boost-users] polymorphic container/boost::any * Replies will be sent through Spamex to boost-users@lists.boost.org * For additional info click -> http://www.spamex.com/i/?v=4259897 I'm quite sure that this problem has been addressed many times before, so I suspect it as a better name and I suspect that boost::any could be the solution. I want to store related types in the same stl container, for instance, this is the class heirachy I want: class tree { public: void grow() =0; }; class oak : public tree { public: void grow() { std::cout << "oak grows slowly" << std::endl; }; class pine : public tree { public: void grow() { std::cout << "pine grows quickly" << std::endl; }; Then, I try to put them in a std::list: std::list< tree > forest; forest.push_back(oak()); forest.push_back(pine()); ...and I find out that I can't define tree::grow as abstract. So I give it a dummy implentation -- void grow() { std::cout << "tree grows" << std::endl; --, and try to iterate over the objects: for(std::list< tree >::iterator iter = forest.begin(); forest.end() != iter; ++iter) { iter->grow(); } ...and I don't get what I expect: tree grows tree grows I then think about trying to use a std::list< tree& > and discover that it won't compile. I think briefly consider std::list< tree* > but decide this dosen't meet requirements of memory management. So I do some searching for 'polymorphic container' and 'polymorphic iterator' and come up with boost::any, but I've no luck in making it work. Attached is my code. In the end, I'm looking for a way to add related types to a stl container and not have to do anything complicated to call a method on the type's abstract interface and to not have to wory about memory management. Maybe this question is better suited for comp.lang.c++[.moderated]? -- Matthew Peltzer -- goochrules@gmail.com
participants (1)
-
dp12-ipvi@spamex.com