Конфигурационные файлы
От: Ytz https://github.com/mtrempoltsev
Дата: 30.04.11 17:01
Оценка:
Подскажите есть ли библиотека для работы с конфигурационными файлами которая поддерживает проверку допустимости значений?

Пример конфигурации:

measurement_time = 3


При этом в коде приходится писать проверки:

if (measurement_time < 1 || measurement_time > 30) ...


Что конечно утомительно. Хотелось бы описать правила для значений и оставить эту работу библиотеке, примерно так:

measurement_time : int, allowed [1..30];


Есть что нибудь похожее?

P.S. Про XML Schema знаю, но конфиги в XML не для людей и сама реализация достаточно сложна.
Re: Конфигурационные файлы
От: alexeiz  
Дата: 30.04.11 18:33
Оценка: 3 (2)
Здравствуйте, 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
Re: Конфигурационные файлы
От: Kswapd Россия  
Дата: 30.04.11 19:38
Оценка: -1 :)
Ytz>Подскажите есть ли библиотека для работы с конфигурационными файлами которая поддерживает проверку допустимости значений?

Как вариант: встроить в программу скриптовый язык, оформляя файлы конфигурации скриптами на этом языке. Проверки можно будет делать на двух уровнях: в самих скриптах либо в реализациях команд.
Re[2]: Конфигурационные файлы
От: Ytz https://github.com/mtrempoltsev
Дата: 01.05.11 05:54
Оценка:
Здравствуйте, 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" ];
Re: Конфигурационные файлы
От: jazzer Россия Skype: enerjazzer
Дата: 01.05.11 06:22
Оценка: +1
Здравствуйте, Ytz, Вы писали:

Ytz>Подскажите есть ли библиотека для работы с конфигурационными файлами которая поддерживает проверку допустимости значений?


Boost.ProgramOptions

Прямо того, что ты хочешь, из коробки нет, но есть возможность задавать свои валидаторы для разных опций, и они будут применяться при парсинге:
http://www.boost.org/doc/libs/1_46_1/doc/html/program_options/howto.html#id2219998
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.