Во-первых, я бы разделил членов на два набора: (1) те, которые предназначены только для внутреннего использования, (2) те, которые пользователь настроит для управления поведением класса.Первый набор должен быть просто закрытыми переменными-членами.
Если второй набор большой (или растет и изменяется, потому что вы все еще занимаетесь активной разработкой), то вы можете поместить их в собственный класс или структуру.,Ваш основной класс будет тогда иметь два метода, GetTrackingParameters
и SetTrackingParameters
.Конструктор установит значения по умолчанию.Пользователь может затем вызвать GetTrackingParameters
, внести изменения, а затем вызвать SetTrackingParameters
.Теперь, когда вы добавляете или удаляете параметры, ваш интерфейс остается постоянным.
Если параметры простые и ортогональные, то они могут быть заключены в структуру с хорошо именованными открытыми членами.Если есть ограничения, которые должны быть применены, особенно комбинации, то я бы реализовал параметры как класс с геттерами и сеттерами для каждого параметра.
ObjectTracker tracker; // invokes constructor which gets default params
TrackerParams params = tracker.GetTrackingParameters();
params.number_of_objects_to_track = 3;
params.other_tracking_option = kHighestPrecision;
tracker.SetTrackingParameters(params);
// Now start tracking.
Если вы позже изобрели новый параметр, вам просто нужнообъявить нового члена в TrackerParams и инициализировать его в конструкторе ObjectTracker.