Я сталкиваюсь со следующей проблемой проектирования:
Я использую библиотеку Qt C ++ для приложения.В этой библиотеке есть «модельные» классы, которые все наследуются от QAbstractItemModel
(например, QAbstractTableModel
, QStandardItemModel
и т. Д.).Я хочу наследовать от нескольких из этих классов, но определяю свой собственный интерфейс, который они должны совместно использовать.
В настоящее время я делаю это, определяя интерфейс (чисто виртуальный класс) и получая наследуемые классы отэто тоже.В качестве примера, скажем, я хочу, чтобы класс, унаследованный от QAbstractTableModel
, имел функцию doSomething
:
class MyInterface {
public:
virtual void doSomething() = 0;
}
class MyModel : public QAbstractTableModel, public MyInterface {
...
}
Однако я просто хочу передать объекты как QAbstractItemModel
.Чтобы использовать интерфейсные классы, я должен привести их к MyInterface
объектам, а затем вызвать функции, что приводит к приведению повсюду.Кроме того, если кто-то еще делает свой собственный класс наследующим от QAbstractItemModel
, создается впечатление, что есть место для ошибки, если он также не наследует интерфейс.
Есть ли лучший дизайн, который я мог бы использовать, чтобы выполнить все это