Hi!
do_clone is really private ;) Your derived class has public clone member and you should use it from the free function, but no the do_clone.
Regards,
Ovanes
In this post Peter Dimov shows a solution for the covariant return type
problem when using shared_ptr:
http://lists.boost.org/boost-users/2003/02/2996.php
I'm interested in the free function solution he provides:
> [snip] you can use the usual pattern from the no-covariant-return days:
>
> class B
> {
> virtual shared_ptr<B> do_clone() const = 0;
> };
>
> class X: public B
> {
> virtual shared_ptr<B> do_clone() const { return shared_ptr<X>(new
> X(*this)); }
>
> public:
>
> shared_ptr<X> clone() const
> {
> shared_ptr<X> px = dynamic_pointer_cast<X>(this->do_clone());
> assert(px);
> return px;
> }
> };
>
> It buys you some extra safety, too.
>
> You could also use a free function:
>
> template<class X> shared_ptr<X> clone(X const & x)
> {
>
> shared_ptr<X> px = dynamic_pointer_cast<X>( x.do_clone());
> assert(px);
> return px;
> }
>
So, to clone an object using the clone method, I could use:
X* x;
shared_ptr<X> spX(x = new X());
shared_ptr<X> spX2 = spX->clone();
// or:
shared_ptr<X> spX3 = x->clone();
But how is the free function meant to be used?
This provokes the compiler error: '... do_clone() const is private ...':
shared_ptr<X> spX4 = clone(*spX);
Thank you
Bernhard
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users