Re: Multiply inherit from classes with conflicting function names
Adam wrote:
I have an unfortunate case where a single class wants to derive from two
existing classes:
struct A { virtual long fun() = 0; };
struct B { virtual bool fun() = 0; };
struct Unfortunate : public A, public B { ??? };
Is it possible to fill in the ??? here with legal code?
You can introduce trivial intermediate classes to "rename" the
functions.
I need two different function bodies; A::fun and B::fun do unrelated
things.
More or less the same question with a twist: if A::fun and B::fun both
returned the same type, would it be possible to implement two functions
in C such that
C().A::fun()
and
C().B::fun()
would execute two different functions?
The intermediate classes would still work, but with a different syntax:
C().A_fun();
Here is a complete test:
#include <iostream>
struct A { virtual long fun() = 0; };
struct B { virtual bool fun() = 0; };
struct A_impl : public A
{
virtual long A_fun() = 0;
virtual long fun()
{
return A_fun();
}
};
struct B_impl : public B
{
virtual bool B_fun() = 0;
virtual bool fun()
{
return B_fun();
}
};
struct Unfortunate : public A_impl, public B_impl
{
virtual long A_fun()
{
std::cout << "long\n";
return 0;
}
virtual bool B_fun()
{
std::cout << "bool\n";
return false;
}
};
int main()
{
Unfortunate u;
// Ambiguous to call fun()
u.A_fun();
u.B_fun();
// No ambiguity through the base interfaces
A & a = u;
a.fun();
B & b = u;
b.fun();
}
Ali
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]