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のようなポインターと参照somethinは前方宣言のみを必要とするため、前方宣言については問題ありませんが、実際の定義が追加のテンプレート引数 (おそらくデフォルト) を取る場合は、それらの追加引数を前方宣言に含める必要があることに注意してください。これは、競合する可能性のある実装定義の追加パラメーター (テンプレートまたはその他) を持つ可能性があるため、標準ライブラリで型と関数を転送してはならない理由の 1 つです。

于 2013-02-06T21:11:26.900 に答える