При создании структуры наследования C ++ необходимо определить функции-члены в нескольких местах одинаково:
Если B является абстрактным базовым классом, а D, E и F все наследуются от B, у вас может быть это:
class B
{
virtual func A( ... params ) = 0;
};
class D : public B
{
func A( ... params );
};
/* ... etc... similar implementations for E and F */
Итак, здесь есть определенное дублирование. Если интерфейс к B большой, у вас может быть много мест для изменения, если необходимо изменить интерфейс.
Коллега предложил несколько хитростей со встроенным хитроумно созданным #include, ala:
class D: public B
{
#include "B_Interface.h" // B_Interface.h is a specially crafted .h file
}
Это кажется немного глупым? Это? Есть ли лучшее решение, чтобы избежать двойного обслуживания?
Кроме того, может быть, решение здесь - действительно лучшие инструменты для поддержки языка, такие как Visual Assist X?
Редактировать: Предположим, что производные классы должны иметь уникальные реализации.