Я использую агрегатный инициализатор для настройки блока статических данных для модульного теста.
Я хотел бы использовать размер массива в качестве ожидаемого количества элементов, но это может завершиться ошибкой, если предоставлено слишком мало инициализаторов:
my_struct_type expected[14] =
{
{ 1.234, 0, 'c' },
{ 3.141, 1, 'z' },
{ 2.718, 0, 'a' }
};
Это не дает ошибки компилятора в Visual Studio 2008.
Я бы хотел использовать его так:
const unsigned expected_size = sizeof(expected) / sizeof(my_struct_type);
BOOST_CHECK_EQUAL(points.size(), expected_size);
for( int i = 0; i < expected_size; i++ )
{
BOOST_CHECK_EQUAL(points[i].value, expected[i].value);
BOOST_CHECK_EQUAL(points[i].count, expected[i].count);
BOOST_CHECK_EQUAL(points[i].sym, expected[i].sym);
}
, но, поскольку у меня нет гарантии времени компиляции в 14 пунктов, это запускает конец массива конец предоставленных значений и инициализированные по умолчанию значения.
Могу ли я как-то принудительно установить количество инициализаторов агрегатных массивов во время компиляции?