Я часто сталкивался с API, которые позволяют пользователям получать и устанавливать различные параметры, управляющие работой модуля. Теперь я собираюсь написать еще один API свойств, но не хочу изобретать велосипед.
Ниже приведен типичный базовый код клиента:
setInt("bitrate", 1000);
setEnum("mode", MODE_FAST);
setStr("output file", "music.mp3");
Часто существуют десятки параметров, которые можно установить, и такие наборы свойств часто находятся в процессе непрерывной разработки.
Некоторые API умнее других, более продвинутые функции:
- Иерархическая группировка свойств
- Перечень свойств
- Числовые параметры с принудительными минимумами и максимумами
- Значения параметров по умолчанию
- Настройки, которые включены, отключены или доступны только для чтения
- Динамические параметры - настройки, которые появляются, исчезают, имеют минимальное / максимальное значение, становятся включенными, отключенными или доступны только для чтения в зависимости от состояния других параметров.
- Свойства, доступные через ключ UUID, а не текстовое имя
Помимо средств доступа в стиле C в приведенном выше примере кода, я встречал фреймворки, которые могут:
- Чтение / запись свойств в файл (например, XML)
- Чтение / запись настроек в реестр Windows
- Интерфейс с API-интерфейсами системных свойств, например
IPersistPropertyBag
- Имеют стандартные реализации GUI по умолчанию, например древовидная структура или список
- Иметь расширения графического интерфейса, соответствующие минимуму / максимуму / включенному состоянию, уменьшая повторение в коде графического интерфейса.
Я хотел бы найти хорошо спроектированную публичную библиотеку, которая обеспечивает основу для всего вышеперечисленного, но до сих пор вычеркнула пробел. Мне известно о Boost.PropertyTree , но это всего лишь скелет. Существуют ли другие API-интерфейсы переносимых свойств, о которых мне следует знать?