Maxim Yegorushkin
10/16/2008 3:04:00 PM
On Oct 16, 3:35 pm, Isaac Gelado <igel...@gmail.com> wrote:
> I am having problems with inheritance in templates classes. Say I
> have the following classes:
>
> class A {};
> class B: public A {};
> template<typename T> class C {};
>
> Now in my code I have something like:
>
> C<A *> *myAPtr;
> myAPtr = new C<B *>();
>
> I'm getting an error saying that conversion from C<B *> to C<A *> is
> not possible.
The actual error is that C<B*>* can not be converted to C<A*>*.
This is expected, as each instantiation of a class template produces a
distinct class, unless template arguments are the same.
> Does it mean I can no use subclassing with templates
> without using ugly casts?
To make derived-to-base conversion from C<B>* from C<A>* work C<B> has
to derive from C<A>.
If, on the other hand, you just want to make a conversion from C<B> to
C<A> possible, you need to have a template conversion constructor,
just like the standard smart-pointers do (std and boost):
template<class T> struct C
{
template<class U>
C(C<U> const&);
};
--
Max