2010-12-17 65 views
1

我有更多或更少的遵循該圖案的結構:C++初始化包含數組

struct sTruct { 
    int count; 
    struct { 
     int A; 
     int B; 
     int C; 
    } array[]; //count is the size of this array 
}; 

我想能夠與類似以下語法來初始化這些:

sTruct gInit1 = { 2, { {1,2,3},{4,5,6} }}; 

真的,初始化語法(或者說它的緊湊性)比特定的結構佈局更重要。我無法訪問標準容器(嵌入式平臺),但如果需要,我可能能夠複製它們的一些行爲。

在最終形式中,我想一次初始化大約300個這些sTruct容器的數組,只是爲了添加更多級別的括號。

回答

7

你不能這樣做。如果你給陣列一個大小,你可以。另一種可能是:

template < int size > 
struct sTruct 
{ 
    struct { int a, int b, int c } array[size]; 
}; 
sTruct<2> gInit1 = {{1,2,3},{4,5,6}}; 

但是,當然,所有的sTructs是不同的類型,所以它可能不是你想要的。你唯一的其他選擇是基於自由存儲的,並且不會給你那種語法,直到初始化列表在0x中。

+0

我想填充不同大小的sTructs到同一個數組中並沒有太大的意義。我可能會使用類似這樣的模板,儘管我仍然需要將「size」變量本身添加到外部結構中。 – jkerian 2010-12-17 17:40:12

+0

如果你喜歡這個答案,你可以使用boost :: array。這或多或少正是我的答案,但可以容納任何東西並像標準容器一樣行爲(除非它具有靜態大小,並且可以使用聚合語法進行初始化)。 – 2010-12-17 17:46:14