Boost logo

Boost Users :

From: dp12-ipvi_at_[hidden]
Date: 2004-08-12 18:28:24


Use std::list<boost::shared_ptr>

I hope I spelled all that correctly.

    ++PLS

-----Original Message-----
From: goochrules! [mailto:goochrules_at_[hidden]]
Sent: Thursday, August 12, 2004 2:02 PM
To: boost-users_at_[hidden]
Subject: [Boost-users] polymorphic container/boost::any

* Replies will be sent through Spamex to boost-users_at_[hidden]
* 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_at_[hidden]


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