Я пытаюсь использовать форвардные декларации и d-указатели для устранения некоторых зависимостей include. Все работает хорошо, за исключением того, что во многих местах я использовал XList typedefs для чтения (например: typedef QList<X> XList
).Наследование из контейнера с не виртуальным деструктором
Обходной путь для проблемы с объявлением опечатки typedef заключается в использовании наследования: class XList : public QList<X>{};
. QList имеет не виртуальный деструктор. Учитывая тот факт, что Qt's QStringList наследует QList<QString>
, и я не выделяю XLists в кучу, вы видите какие-либо проблемы с этим обходным решением? Должен ли я явно запрещать выделение кучи для классов XList?
Интересно, насколько важно удалить ** все ** включить зависимости, особенно по сравнению с использованием небезопасных, унииоматических конструкций ... Иногда вам лучше стоять в средней земле: удалять как можно больше зависимостей, не впадая в мутную воды. –
Вот что мне было интересно. Меня беспокоит его унииоматичность. Насколько я могу определить, это будет безопасно, особенно если я статически запрещаю выделение кучи, хотя я тоже хотел бы проверить его. – rpg
В качестве альтернативы вы можете создать заголовочный файл «FooListDeclare.h», который в основном «#include \ nclass Foo; \ ntypedef QList FooList;". Я считаю, что это позволит вам объявить typdef, не требуя зависимости определения класса в любом месте, которое вам уже не понадобилось. –