Подскажите есть ли библиотека для работы с конфигурационными файлами которая поддерживает проверку допустимости значений?
Пример конфигурации:
measurement_time = 3
При этом в коде приходится писать проверки:
if (measurement_time < 1 || measurement_time > 30) ...
Что конечно утомительно. Хотелось бы описать правила для значений и оставить эту работу библиотеке, примерно так:
measurement_time : int, allowed [1..30];
Есть что нибудь похожее?
P.S. Про XML Schema знаю, но конфиги в XML не для людей и сама реализация достаточно сложна.
Здравствуйте, Ytz, Вы писали:
Ytz>При этом в коде приходится писать проверки:
Ytz>Ytz>if (measurement_time < 1 || measurement_time > 30) ...
Ytz>
Ytz>Что конечно утомительно. Хотелось бы описать правила для значений и оставить эту работу библиотеке, примерно так:
Ytz>Ytz>measurement_time : int, allowed [1..30];
Ytz>
В boost предлагалась библиотека constrained value library:
http://student.agh.edu.pl/~kawulak/constrained_value/index.html
Здравствуйте, alexeiz, Вы писали:
A>В boost предлагалась библиотека constrained value library: http://student.agh.edu.pl/~kawulak/constrained_value/index.html
Штука конечно хорошая, но моей задачи не решает. Например значение sink может принимать значения file, pipe, socket. От ручного кодирования данная библиотека не спсет, так как придется написать:
struct is_allowed_for_sink
{
bool operator()(const std::sring& value) const
{
return value == "file" || value == "pipe" || value == "socket";
}
};
constrained<std::string, is_allowed_for_sink> sink;
А хотелось бы просто определить правило и пусть библиотека работает:
sink: text, allowed [ "file", "pipe", "socket" ];
Здравствуйте, Ytz, Вы писали:
Ytz>Подскажите есть ли библиотека для работы с конфигурационными файлами которая поддерживает проверку допустимости значений?
Boost.ProgramOptions
Прямо того, что ты хочешь, из коробки нет, но есть возможность задавать свои валидаторы для разных опций, и они будут применяться при парсинге:
http://www.boost.org/doc/libs/1_46_1/doc/html/program_options/howto.html#id2219998