I've got a problem with implicit casting, templates and inheritance from template classes. The following is what I extracted from my project, I have left out that some classes are even abstract, but it does not have to do with the case.
class A {};
class B : public A {};
template <typename T> class Base {};
class Derived : public Base<B> {};
int main() {
Derived d;
Base<A>* base = new Derived();
}
Basically, I have a template base class Base
that I derive Derived : public Base<B>
from. Then I have to cast it to the most general occuring form of Base, which is Base<A>
.
I would have thought that I can cast an Object deriving from Base<B>
to Base<A>
implicitly, as B
derives from A
. Am I doing something wrong or how could I cast that implicitly? This is important as I need to accept all types of Derived classes in a method of Base
as a parameter.
Thanks in advance.
This is not possible. Base<A>
has no relation to Base<B>
, regardless of the relation between A and B.
Base<B>
does not necessarily need to have a relation to Base<A>
. This doesn't have anything to do with Derived
. If you want to force such a relation, you're going to need a templated constructor.
template <typename T>
class Base
{
template <typename TOther>
Base(const TOther& that)
{
// ...
}
// ...
};
Obviously, the implementation would have to depend on the actual implementation of Base
. Note that this constructor doesn't substitute for the normal copy constructor.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With