C++ 即使我知道哪个泛型I';你要用什么?

C++ 即使我知道哪个泛型I';你要用什么?,c++,qt,forward-declaration,C++,Qt,Forward Declaration,这可以编译,但我想知道它是否不安全 在我的标题中,我向前声明这一点 class QStringList; template<> class QList<QStringList>; class MyClass { ... static void somethin(const QList<QStringList> &thelist); } 类QStringList; 模板类QList; 类MyClass{ ... 静态void so

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

在我的标题中,我向前声明这一点

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

class MyClass {
     ...
     static void somethin(const QList<QStringList> &thelist);
}
类QStringList;
模板类QList;
类MyClass{
...
静态void somethin(const QList和thelist);
}
然后在我的实现中我这样做

#include <QStringList>
#include <QList>
#include "MyClass.h"
void MyClass::somethin(const QList<QStringLisT> &thelist) { ... }
#包括
#包括
#包括“MyClass.h”
void MyClass::somethin(const QList&thelist){…}
无论“什么”都能保证安全吗


感谢

声明了某个
引用,并定义为接受一个不应编译的指针(除非它是您在示例中删除的重载)


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

您的前向声明类需要对此进行定义才能执行任何操作,但我不知道为什么这样做会不安全?我不确定,但有什么特殊原因使您不能在MyClass声明之前包含QStringList和QList?@Mats。我没有理由不包含它们,我只是意识到我我不知道这是否有效,并看到它编译,但我不确定它是否正常。高度不合逻辑,但安全。看到了吗