|
Boost Users : |
From: Victor A. Wagner Jr. (vawjr_at_[hidden])
Date: 2004-08-13 03:52:05
std::list<boost::shared_ptr<tree> > forest;
of course you'll have to allocate (new) them before putting their pointers
in the list,
but that's not a huge issue.
At Thursday 2004-08-12 14:01, you wrote:
>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_at_[hidden]
>
>_______________________________________________
>Boost-users mailing list
>Boost-users_at_[hidden]
>http://lists.boost.org/mailman/listinfo.cgi/boost-users
Victor A. Wagner Jr. http://rudbek.com
The five most dangerous words in the English language:
"There oughta be a law"
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net