Re: Covariant return types and MI
And thus spake Joshua Maurice <joshuamaurice@gmail.com>
Fri, 5 Mar 2010 12:32:14 -0800 (PST):
Yes. Visual studios, all versions AFAIK do not support covariant
return types and multiple inheritance, or maybe virtual multiple
inheritance. I suggest the following quoted from Alf P. Steinbach here
http://groups.google.com/group/comp.lang.c++/msg/e50bd48283d94bb2
as a good workaround for this lack of support, though perhaps more
costly on compilers which actually support it. (I don't know
offhand.)
That workaround does not work for me, since my problem is not
virtual inheritance. If I *had* a common base class, I would not
need covariant return types, since in most cases it would be
fine to just return a pointer to base.
My problem is that I have *two* completely distinct abstract
bases which both stipulate that implementations support a
clone() method. On GCC, this seems to be no problem, and I find
nothing in the language standard that says this is illegal (in
fact, this scenario is IMHO exactly the reason to allow
covariant types, which is why even Java supports them by now).
Thankfully I do not have to deal with virtual inheritance here;
maybe this means that it will work also in VC++. If not, I will
have to change the structure to something like this:
class interf1
{
virtual ~interf1() {}
virtual interf1* clone_i1() = 0;
};
class interf2
{
vitual ~interf2() {}
virtual interf2* clone_i2() = 0;
};
class impl : public interf1, public interf2
{
interf1* clone_i1() {return new impl(*this)};
interf2* clone_i2() {return new impl(*this)};
};
....which would be nothing but an ugly hack. Oh well, so what
else is new. It's my own fault of course: I just *had* to have
the ambition to support VC++. I should just say to the users of
my library "get a real C++ compiler" and be done with it.
Regards,
Robert