初始化 C++ 中类中的非基元静态数据类型


#include <QQueue>
#include <QString>
class   Util {
public:
    static QQueue<QString> links;
    Util() {
    }
};
    Util::links.enqueue("hello world");

我该怎么做?

你可以用一个函数的结果来初始化它:

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

最新更新