при условии, у меня есть объект, похожий на этот:скобка огороженного списка инициализатора
struct MenuDef
{
int titleResourceId;
struct MenuItemDef {
char* name;
int value;
SomeFunctionPtr someFactory;
} menuItems[10];
};
Это инициализируется следующим образом:
const MenuDef m = {
1,
{
{
"zero",
0,
(SomeFunctionPtr) & MenuButton::factory,
},
{
"one",
1,
(SomeFunctionPtr) & MenuButton::factory,
},
{
"two",
2,
(SomeFunctionPtr) & MenuButton::factory,
},
}
};
Безопасно предположить, чтоm.menuItems[3].someFactory == 0
?
, например, в цикле, как это:
for (int i = 0; m.menuItems[i].someFactory != 0; ++i)
или я должен вставить последний элемент, чтобы отметить конец массива вручную на всякий случай?
...
{
"two",
2,
(SomeFunctionPtr) & MenuButton::factory,
},
{
"",
0,
(SomeFunctionPtr) 0,
},
...
Это не отвечает на ваш вопрос (я думаю, что @icecrime правильно понял), но тот факт, что вы должны указывать адреса функций при инициализации, должен быть большим красным флагом. Даже если это сейчас работает, в будущем ваш компилятор может измениться, и он не сможет работать из-за кастинга между несовместимыми типами указателей функций. –
@Mark B не уверен, что вы имеете в виду ... можете ли вы привести пример? –