【发布时间】:2021-02-17 11:22:40
【问题描述】:
我读到了替换
#include <SomeClass>
通过
class SomeClass;
可能会带来一些好处,包括加快编译时间。
所以我要检查一个 Qt 项目,并将我的项目头文件中的所有 #include <Qt...> 替换为 class Qt...;。但是当我为QMap 这样做时,它返回了
non-class template has already been declared as a class template”
这是什么意思?
【问题讨论】:
-
模板类的前向声明需要它的模板参数,
template <typename Key, typename Value> class QMap;见QMap。 -
fwiw,您不能简单地将任何包含替换为前向声明。在前向声明不足的地方,您会遇到其他错误。见这里stackoverflow.com/questions/4757565/…
-
小心转发第三个库类。别名,(新的)默认模板参数可能会出现,并且对于维护有问题,甚至取决于配置/平台。
-
到目前为止,我只遇到了
QMap和QVector的问题,对于所有其他#include <Qt...>,看起来我可以替换它并且它似乎可以工作