2014-09-25 4 views
1

я принципиально хочу сделать что-то вроде этого:Как объявить массив массивов разных размеров в C++?

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++ как нестандартное расширение.

+0

О, черт побери. Это то, что у меня есть сейчас, но я пытался устранить избыточность. Нет лучшего способа, а? –