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 回答