Недавно я встретил классы, которые используют объект конфигурации вместо обычных методов настройки для конфигурации. Небольшой пример:Конфигурация structs vs seters
class A {
int a, b;
public:
A(const AConfiguration& conf) { a = conf.a; b = conf.b; }
};
struct AConfiguration { int a, b; };
В расквитаться:
- Вы можете расширить свой объект и легко гарантировать разумные значения по умолчанию для новых значений без ваших пользователей когда-либо нужно знать об этом.
- Вы можете проверить конфигурацию для согласованности (например, ваш класс допускает только некоторые комбинации значений)
- Вы экономите много кода, пропустив сеттеры.
- Вы получаете конструктор по умолчанию для указания конструктора по умолчанию для вашей структуры конфигурации и используете
A(const AConfiguration& conf = AConfiguration())
.
Обратные (ы):
- Вы должны знать конфигурацию во время строительства и не можем изменить его позже.
Есть ли еще недостатки в этом, что мне не хватает? Если нет: почему это не используется чаще?
Я недавно столкнулся с этим со старой базой кода, которую поддерживаю. Это очень раздражает. –
Windows API делает это очень просто, добавив поле размера, убедившись, что структуры являются POD и только добавлением полей данных в конце. Добавьте поддерживающие старые конструкторы для создания новых структур (с разумными значениями по умолчанию для новых полей), а совместимость фактически _increased_. – sbi
Я написал зеркальный ответ, где я покажу, что вместо этого увеличивается совместимость. –