У меня есть ромбовидное наследование интерфейсов: общий интерфейс IReadableDataset виртуально наследуется двумя другими: IEditableDataset и IStatisticalDataset. В свою очередь, есть реализация CDatasetImpl, которая реализует IStatisticalDataset и IEditableDataset.
Можно ли обойтись без виртуального наследования? Например, с помощью какого-то хитрого трюка с шаблонами?
class IReadableDataset { public: virtual void SayReadableDataset() const = 0; }; class IEditableDataset: virtual public IReadableDataset { public: virtual void SayEditableDataset() const = 0; }; class IStatisticalDataset: virtual public IReadableDataset { public: virtual void SayStatisticalDataset() const = 0; } class CDatasetImpl: public IEditableDataset, public IStatisticalDataset { public: virtual void SayReadableDataset() const; virtual void SayEditableDataset() const; virtual void SayStatisticalDataset() const; };
ссылка на оригинал статьи http://habrahabr.ru/post/166995/
Добавить комментарий