#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString> links;
Util() {
}
};
Util::links.enqueue("hello world");
どのようにすればいいですか?あなたはグローバルスコープで、いつものように初期化C++でのクラス内の非プリミティブな静的データ型の初期化
#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString> links;
Util() {
}
};
Util::links.enqueue("hello world");
どのようにすればいいですか?あなたはグローバルスコープで、いつものように初期化C++でのクラス内の非プリミティブな静的データ型の初期化
:
QQueue<QString> Util::links;
または
QQueue<QString> Util::links(1); // with constructor parameters if necessary
「hello world」以外はありません!また、[QQueue](http://qt-project.org/doc/qt-4.8/qqueue.html)にはそのコンストラクタがありません – Shahbaz
は、静的メンバ関数を使用してみてください:
#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString>& links() {
static QQueue<QString> instance;
static bool is_init = false;
if(!is_init) {
instance.enqueue("hello world");
is_init = true;
}
return instance;
}
Util() {
}
};
C++ 11 QQueueているようですShahbazが言ったように、イニシャライザリストをサポートする:
QQueue<QString> Util::links = {"hello world"};
マルチスレッドプログラムでは、それを初期化する必要があります複数のスレッドがそのスレッドにアクセスできるようにします。静的オブジェクトには問題はありません。 –
@MikeSeymourええ、静的メンバー関数はこれのための解決策ではありません。 – Pubby
あなたが関数の結果でそれを初期化することができます:
QQueue<QString> make_links() {
QQueue<QString> queue;
queue.enqueue("hello world");
return queue;
}
QQueue<QString> Util::links = make_links();
私はQTに慣れてないんだけど、一つは、彼らはここで、C++ 11の初期化子リストのサポートを追加していることを願っていかもしれません
QQueue<QString> Util::links {"hello world"};
(UPDATE:Shahbazさんのコメント内のリンクによると、あなたは確かにあなたがC++ 11を使用している場合、それを行うことができます)あなたのようにそれを初期化することができると思いますケース。
あなたはすべてのそのような場合のために、静的初期化子オブジェクトを使用することができます。
ヘッダファイル:
#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString> links;
Util() {
}
};
のcppファイル:
namespace {
struct StaticInitializer {
StaticInitializer() {
Util::links.enqueue("hello world");
}
} initializer;
}
おそらくhttp://qt-project.org/doc /qt-4.8/qlist.html#QList-3は役に立ちます – Shahbaz