I have a quite special situation in my C++ program.
Look at the following class setup:
class Base1 {
public: void baseMethod();
}
class Base2 : public Base1 {
...
}
class Common {
public: void commonMethod();
}
class Derived1 : public Base1, public Common {
...
}
class Derived2 : public Base2, public Common {
...
}
Base1
and Base2
are unchangeable for me as they are part of a library.
What I want to achieve is that both Derived1
and Derived2
share the same method commonMethod()
, so I use class Common
with that method as a common base for Derived1
and Derived2
.
The problem now is that commonMethod()
shall contain a call to baseMethod()
which is defined in Base1
! In the context of a Derived1
- or Derived2
-object this is legal, but how to define that method in Common
?
I know that if I would declare Base2
as virtual derived class from Base1
and the same for Common
, it shouldn't be a problem (at least for Derived2
, not sure about Derived1
). But as I can't modify Base2
that's not possible anyway.
Also letting Common
inherit from Base2
and then Derived1
and Derived2
solely from Common
doesn't work because I don't want Derived1
to inherit from Base2
!
What then came to my mind was to make a dynamic_cast within commonMethod()
:
void Common::commonMethod() {
...
Base1* self = dynamic_cast<Base1*>(this);
if(self) {
self->baseMethod();
}
...
}
This seems to work, but I'm not sure if this is a "nice" solution...
Do you have any ideas how to make it better? Or do you think this solution isn't bad at all? :)