Я хочу инициализировать множество разных объектов определенного типа (структуры) с разными значениями для их полей, и я хочу использовать имена для инициализации, чтобы сделать код читабельным и надежным.
Списки инициализаторов у построек есть два убийственных недостатка:
Они безымянны; если у меня есть десяток однотипных параметров (цвета элементов пользовательского интерфейса), в них легко запутаться; трудно понять, что означает каждый из них, а комментарии не помогают и даже могут ввести в заблуждение из-за (2).
Порядок полей структуры определяется установленным контрактом (или API, или интерфейсом). ); если завтра разработчик изменит порядок полей (лучшее размещение в памяти, более частое использование, алфавитный порядок и т. д.), он испортит все списки инициализаторов со значениями одного и того же типа на непредсказуемом далеке места кода, которые довольно сложно найти, даже если вы поняли, что произошло.
Вот задача, которую я пытаюсь выполнить решить. У меня есть конфигурация приложения, которую в данном конкретном случае я не хочу помещать во внешний файл и хочу скомпилировать. Это очень близко к тому, как определить структуру C++ для конфигурации?, но я не готов помещать часто меняющиеся параметры в заголовочный файл и вызывать перекомпиляцию всего приложения при каждом изменении значения в исходном коде параметров (спецификация или проект НИОКР, много вещей, которые нужно часто настраивать). Итак, я поместил фактические значения в файл cpp.
Давайте рассмотрим код (пожалуйста, не зацикливайтесь на конкретном примере, цвета пользовательского интерфейса здесь просто для простоты примера):
params.h
Я хочу инициализировать множество разных объектов определенного типа (структуры) с разными значениями для их полей, и я хочу использовать имена для инициализации, чтобы сделать код читабельным и надежным. Списки инициализаторов у построек есть два убийственных недостатка: [list] [*]Они безымянны; если у меня есть десяток однотипных параметров (цвета элементов пользовательского интерфейса), в них легко запутаться; трудно понять, что означает каждый из них, а комментарии не помогают и даже могут ввести в заблуждение из-за (2). [*]Порядок полей структуры определяется установленным контрактом (или API, или интерфейсом). ); если завтра разработчик изменит порядок полей (лучшее размещение в памяти, более частое использование, алфавитный порядок и т. д.), он испортит все списки инициализаторов со значениями одного и того же типа на непредсказуемом [b]далеке места кода, которые довольно сложно найти, даже если вы поняли, что произошло. [/list] Вот задача, которую я пытаюсь выполнить решить. У меня есть конфигурация приложения, которую в данном конкретном случае я не хочу помещать во внешний файл и хочу скомпилировать. Это очень близко к тому, как определить структуру C++ для конфигурации?, но я не готов помещать часто меняющиеся параметры в заголовочный файл и вызывать перекомпиляцию всего приложения при каждом изменении значения в исходном коде параметров (спецификация или проект НИОКР, много вещей, которые нужно часто настраивать). Итак, я поместил фактические значения в файл cpp. Давайте рассмотрим код (пожалуйста, не зацикливайтесь на конкретном примере, цвета пользовательского интерфейса здесь просто для простоты примера): params.h[/b] [code]struct RGB { unsigned char r=0, g=0, b=0; };