Мой класс должен наложить верхний предел на количество элементов одного из его элементов данных, который является контейнером.
Один из конструкторов моего класса принимает std :: initializer_list в качестве параметра для инициализации этого элемента данных контейнера.
Юнит тест должен проверить, что верхний предел на месте. Для этого мне нужно попытаться вызвать мой конструктор со списком инициализаторов с 1025 элементами.
Есть ли лучший (= более читабельный) способ создания этого 1025-элементного initializer_list, чем наличие ограниченного литерального списка из 1025 элементов в тестовом коде?
(Тип данных элементов всегда короткий без знака (uint16_t), мой класс не является шаблоном.)
Если вы выберете рекурсию шаблона или причудливые «повторяющиеся» макросы, вы, возможно, столкнетесь с ограничениями статической рекурсии, что усложнит вашу реализацию даже больше, чем обычно.
Имея это в виду, я думаю, что самый простой и лучший подход — это просто определить несколько вложенных макросов, т.е.
#define ZEROS_10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define ZEROS_50 ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10
#define ZEROS_250 ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50
#define ZEROS_1K ZEROS_250, ZEROS_250, ZEROS_250, ZEROS_250
FooType f{ ZEROS_1K, ZEROS_10, ZEROS_10, 0, 0, 0, 0, 0 };
Других решений пока нет …