在C ++中初始化类中的非原始静态数据类型

时间:2012-05-03 10:47:16

标签: c++ qt class static-members

#include <QQueue>
#include <QString>

class   Util {
public:

    static QQueue<QString> links;

    Util() {
    }
};

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

我该怎么做?

4 个答案:

答案 0 :(得分: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,确实可以这样做。)

答案 1 :(得分: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() {
    }
};

在C ++ 11中,QQueue似乎支持初始化列表,正如Shahbaz所说:

QQueue<QString> Util::links = {"hello world"};

答案 2 :(得分:1)

您可以在所有此类情况下使用静态初始化程序对象:

头文件:

#include <QQueue>
#include <QString>

class   Util {
public:

    static QQueue<QString> links;

    Util() {
    }
};

cpp文件:

namespace {
    struct StaticInitializer {
        StaticInitializer() {
            Util::links.enqueue("hello world");
        }
    } initializer;
}

答案 3 :(得分:0)

您在全球范围内照常初始化:

QQueue<QString> Util::links;

QQueue<QString> Util::links(1); // with constructor parameters if necessary