Мой вопрос : возможно ли разделить один и тот же вызов функции между двумя унаследованными классами (скажем, Base
и Derived
) и --- ключевой точкой- - избегать пустых экземпляров в Derived
, когда эта функция строго специфицирует c из Base
, или и пустых экземпляров в Base
, когда эта функция строго Speci c из Derived
?
Причина, по которой можно использовать один и тот же вызов, состоит в том, что почти весь код является общим, только некоторые особенности необходимо решать отдельно. Например:
class Base
{
virtual BaseSpecific(); // Useful in Base
virtual DerivedSpecific(); // Useless in Base
};
class Derived : Base
{
BaseSpecific() override; // Useless in Derived
DerivedSpecific() override; // Useful in Derived
};
// f() is so similar between Base and Derived that is shared common in Base
Base::f()
{
...
BaseSpecific();
DerivedSpecific();
...
}
Derived::BaseSpecific() {} // empty implementation in Derived, avoidable?
Base::BaseSpecific() { ... } // define the specific behavior in Base, OK
// or
Derived::DerivedSpecific() { ... } // define the specific behavior in Derived, OK
Base::DerivedSpecific() {} // empty implementation in Base, avoidable?
Предоставляет ли C ++ решение этой проблемы? Это неизбежно?
Заранее спасибо.
PD: Это похоже на этот поток , но отличается в реализации.