2010-12-17 67 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