3
#include <QQueue>
#include <QString>

class   Util {
public:

    static QQueue<QString> links;

    Util() {
    }
};

    Util::links.enqueue("hello world");

どうやってやるの?

4

4 に答える 4

2

関数の結果で初期化できます。

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"};

(更新: Shahbaz のコメントのリンクによると、C++11 を使用している場合は実際にそれを行うことができます)。

于 2012-05-03T10:57:01.717 に答える
1

そのようなすべての場合に静的初期化オブジェクトを使用できます。

ヘッダファイル:

#include <QQueue>
#include <QString>

class   Util {
public:

    static QQueue<QString> links;

    Util() {
    }
};

cpp ファイル:

namespace {
    struct StaticInitializer {
        StaticInitializer() {
            Util::links.enqueue("hello world");
        }
    } initializer;
}
于 2012-05-03T11:53:45.370 に答える
1

静的メンバー関数を使用してみてください。

#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() {
    }
};

Shahbazが言ったように、C++ 11ではQQueueは初期化子リストをサポートしているようです:

QQueue<QString> Util::links = {"hello world"};
于 2012-05-03T10:52:52.377 に答える
0

通常どおり、グローバル スコープで初期化します。

QQueue<QString> Util::links;

また

QQueue<QString> Util::links(1); // with constructor parameters if necessary
于 2012-05-03T10:50:11.327 に答える