2012-07-25 58 views
3

我有一個類:定義和在同一行初始化STL恆定

Temp.h: 
[...] 
class Temp{ 
public: 
    Temp(vector<vector<double> > vect); 
    const static Temp VAR1; 
    const static Temp VAR2; 
    ... 

}; 

我想初始化VAR1和VAR2使用數組雙打的:{{0,1,0,1},{1,0 ,1,0}}。但我不能做到這一點是這樣的:

const Temp::VAR1(...); 

,因爲沒有「單行」運算符來構造向量的向量從數組的數組。我想到了建築結構,如:

B{ 
    vector<vector<double> > vect; 

    B& add (double[] a, int number) {... 
    push elements from array to vector and add this vector to vect ... 
    return *this; 
    } 

    Temp build() {return Temp(vect);} 
} 

但是,當我打電話:

B().add({0,1,0,1},4).add({1,0,1,0},4).build(); 

編譯器無法識別{0,1,0,1}作爲數組,但作爲一個雙*我無法改變它。

是否有任何選項來創建一些方法或類似的東西來初始化const靜態成員多於一行?

我希望我寫得夠簡單,如果沒有,我會稍後編輯它。

回答

3

在C++ 11,使用統一初始化語法:

const Temp::VAR1{{0,1,0,1},{1,0,1,0}}; 

如果你必須保持與C++ 03兼容的,我推薦使用boost::assign

const Temp::VAR1 = list_of(list_of(0)(1)(0)(1))(list_of(1)(0)(1)(0)); 
+0

C++ 11回答簡直太神奇了。我可以在哪裏閱讀有關C++ 11標準的內容? ISO/IEC網頁太昂貴了。 – Benjamin 2012-07-26 08:15:54

+0

是的,它是! [Wikipedia page](http://en.wikipedia.org/wiki/C%2B%2B11)涵蓋了大量的內容,並且可以鏈接到標準的免費下載草案版本。 Herb Sutter的文章[現代C++風格元素](http://herbsutter.com/elements-of-modern-c-style/)非常易讀,並且有很多有趣的鏈接可供參考。 – ecatmur 2012-07-26 08:28:00

2

寫一個靜態函數,它初始化它:

Temp InitTempVar1() 
{ 
    vector<vector<double> > init; 
    // initialize init... 
    return Temp(init); 
} 

Temp InitTempVar2() 
{ 
    vector<vector<double> > init; 
    // initialize init... 
    return Temp(init); 
} 

const Temp Temp::VAR1 = InitTempVar1(); 
const Temp Temp::VAR2 = InitTempVar2();