即使我知道我将使用哪种泛型,转发声明模板类是否安全?

时间:2013-02-06 20:33:02

标签: c++ qt forward-declaration

这编译,但我想知道它是否不安全。

在我的标题中,我转发声明此

class QStringList;
template<> class QList<QStringList>;

class MyClass {
     ...
     static void somethin(const QList<QStringList> &thelist);
}

然后在我的实现中我这样做

#include <QStringList>
#include <QList>
#include "MyClass.h"
void MyClass::somethin(const QList<QStringLisT> &thelist) { ... }

无论“什么?”,这都保证是安全的吗?

由于

1 个答案:

答案 0 :(得分:0)

somethin被声明为接受引用并被定义为接受指针,因此不应该编译(除非它是你在示例中删除的重载。

至于QList的前向声明它应该没问题,因为像somethin中的指针和引用只需要前向声明但要注意,如果实际定义需要额外的模板参数(可能是默认的)那么您必须在前向声明中包含这些附加参数。这就是为什么你永远不应该在标准库中转发声明类型和函数的原因之一,因为它们可能有实现定义了可能冲突的附加参数(模板或其他)。