Idea jest taka: dwa interfejsy ModelFace i dzidziczący po nim ModelExFace. Do tego dwie klasy: Model - oparta na interfejsie ModelFace oraz klasa ModelEx oparta na interfejsie ModelExFace, która dziedziczy klase Model. No i tu sie pojawai problem, aby klasa ModelEx kożystała z interfejsu ModelExFace (czyli również ModelFace) i jednocześnie dziedziczyła po klasie Model.
Naiwna implementacja wygląda tak
class ModelFace {
public: virtual void func() = 0;
};
class Model: public ModelFace {
public: virtual void func() { /*jakiskod*/ };
};
class ModelExFace: public ModelFace {
public: virtual void funcex() = 0;
};
class ModelEx: public ModelExFace, public Model {
public: virtual void funcex() { /*jakiskod*/ };
};
Jednak kompilator zgłasza, że ModelEx jest klasą abstrakcyjną z powodu funkcji ModelFace::func() = 0, oraz istnieje dwuznaczność przy wywołaniu func() pomiędzy ModelFace::func() a Model::func().
Jak sobie z tym poradzić ?