Предположим что есть некий набор публичных интерфейсов (экспортируемых библиотекой):
class IA {
public:
virtual void f1() = 0;
};
class IB : public IA {
public:
virtual void f2() = 0;
};
А также есть базовая реализация интерфейса IA:
class A : public IA {
public:
void f1() {
std::cout << "f1" << std::endl;
}
};
Необходимо реализовать интерфейс IB так, чтобы он предоставлял реализацию интерфейса IA классом A:
// Этот код не компилируется
class B : public IB, public A
{
public:
void f2() {
std::cout << "f2" << std::endl;
}
};
int main(int argc, char* argv[])
{
B b;
b.f1();
b.f2();
return 0;
}
Код на Coliru
Можно ли это сделать, и как?
Решение "в лоб" не подошло, с порядком и видимостью (public/protected/private) наследования игрался... ничего не помогло.