我基本上想做这样的事情:
Foo one;
Foo two;
Foo three;
Foo **arr[] = {
{&one, &two, NULL},
{&one, NULL},
{&one, &two, &three, NULL},
NULL
};
也就是说,我想声明一个以空终止的数组,这些数组的空终止指针数组指向特定类的实例。
这适用于Arduino环境,因此new
,malloc()
和STL无法使用。
答案 0 :(得分:6)
你是在正确的道路上,但在核心语言层面,你将不得不为每个子阵列创建命名数组对象
Foo one;
Foo two;
Foo three;
Foo *row0[] = { &one, &two, NULL };
Foo *row1[] = { &one, NULL };
Foo *row2[] = { &one, &two, &three, NULL };
Foo **arr[] = { row0, row1, row2, NULL };
(根据需要添加const
个限定符。)
在C中你有复合文字功能,可以让你完全按照你的版本进行操作
Foo **arr[] =
{
(Foo *[]) { &one, &two, NULL },
(Foo *[]) { &one, NULL },
(Foo *[]) { &one, &two, &three, NULL },
NULL
};
但它是C特有的功能,在C ++中不存在。您可能想要检查您的编译器是否在C ++中支持它作为非标准扩展。