【发布时间】:2012-05-03 10:47:15
【问题描述】:
#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString> links;
Util() {
}
};
Util::links.enqueue("hello world");
我该怎么做?
【问题讨论】:
标签: c++ qt class static-members
#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString> links;
Util() {
}
};
Util::links.enqueue("hello world");
我该怎么做?
【问题讨论】:
标签: c++ qt class static-members
你可以用函数的结果来初始化它:
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,您确实可以这样做)。
【讨论】:
尝试使用静态成员函数:
#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"};
【讨论】:
您可以在所有此类情况下使用静态初始化对象:
头文件:
#include <QQueue>
#include <QString>
class Util {
public:
static QQueue<QString> links;
Util() {
}
};
cpp 文件:
namespace {
struct StaticInitializer {
StaticInitializer() {
Util::links.enqueue("hello world");
}
} initializer;
}
【讨论】:
你像往常一样在全局范围内初始化:
QQueue<QString> Util::links;
或
QQueue<QString> Util::links(1); // with constructor parameters if necessary
【讨论】:
"hello world" 不存在!另外,QQueue 没有那个构造函数