Boost logo

Boost Users :

From: rz0 (rz0_at_[hidden])
Date: 2001-12-10 11:43:44


--- In Boost-Users_at_y..., Björn Karlsson <bjorn.karlsson_at_r...> wrote:
>
> It seems to me that the problem is in the design - you're trying to
use
> inheritance for the convenience of placeholding (and maybe
insulation). That
> won't work (as you've seen). Even with a compiler that allows the
code to
> compile (those that support member templates will) you will not get
the
> behaviour that you want - funcB and funcC can never be called (from
client
> code). The reason that the code compiles cleanly is that the
conversion from
> B* or C* to A* is valid - but there's no way you can dynamically
change the
> static type of "boost::shared_ptr<A> aptr;".
>
> If you really need to get this to work, it is still possible: You
could use
> boost::any, and any_cast through all the possible types. This,
however, is
> not very flexible, and IMO not very readable or maintainable.
>
>
>
> Regards,
>
> Bjorn Karlsson
>

Hi Bjorn

Thank you very much for the reply.

Unfortunately these classes are provided to me and as part of the
requirements, I must be able to work with them. In re-thinking the
problem, it seems that I'm in desperate need of a polymorphic
container - i.e.:

class A
{
public:
virtual void func1() { std::cout << "A::func1" << std::endl; }
};

class B : public A
{
public:
void func1() { std::cout << "B::func1" << std::endl; }
void funcB() { std::cout << "B::funcB" << std::endl; }
};

class C : public A
{
public:
void func1() { std::cout << "C::func1" << std::endl; }
void funcC() { std::cout << "C::funcB" << std::endl; }
};

int main()
{
     std::vector< some_smart_ptr<A> > vec;

     some_smart_ptr<B> b(new B());

     b->funcB();

      vec.push_back(b);

}

In the Boost group, Mr. Peter Dimov provided a library called
variant. This worked exceptionally well for me on Win2k compiled by
VC++ 6.0. However my target platform is Solaris 2.7 and the compiler
is Sun C++ v6.0 compiler. Unfortunately the results on this platform
were quite unexpected.

Does boost have any polymorphic containers?

Thanks very much in advance.


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