2012-05-03 162 views

回答

0

你初始化像往常一樣,在全球範圍內:

QQueue<QString> Util::links; 

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

除「hello world」外不存在!此外,[QQueue](http://qt-project.org/doc/qt-4.8/qqueue.html)沒有該構造函數 – Shahbaz

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

在多線程程序中,您需要確保初始化它在允許多個線程訪問它之前。你沒有這個靜態對象的問題。 –

+0

@MikeSeymour是的,一個靜態成員函數不是一個好的解決方案。 – Pubby

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

(更新:根據沙赫巴茲的評論的鏈接,你確實可以做,如果你使用的是C++ 11)。

1

您可以使用靜態初始化的對象爲所有這樣的病例:

頭文件:

#include <QQueue> 
#include <QString> 

class Util { 
public: 

    static QQueue<QString> links; 

    Util() { 
    } 
}; 

CPP文件:

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