2

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

在我的标题中,我转发声明这一点

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) { ... }

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

谢谢

4

1 回答 1

0

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

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

于 2013-02-06T21:11:26.900 回答