Библиотеката предоставя прост начин за работа с конфигурационни файлове в програми на C++. Самите файлове се описват в заглавен файл, който осигурява лесен начин за достъп до настройките от програмата.
Заглавният файл на C++ с конфигурацията (напр. config.h
) може да изглежда примерно така:
#ifndef __CONFIG_H__
#define __CONFIG_H__
#include <rueconflib.hpp>
CONFIGURATION ( Config, "test.cfg" )
SECTION ( MainSection )
PROPERTY ( bool, TestBool, true )
SECTION ( AA )
SECTION ( AAA )
PROPERTY ( int, TestInt, 5 )
PROPERTY ( double, TestDouble, 3.1415926 )
END_SECTION
SECTION ( AAB )
PROPERTY ( string, TestString, "Test string" )
END_SECTION
END_SECTION
SECTION ( AB )
END_SECTION
END_SECTION
END_CONFIGURATION
#endif
За всяка конфигурация се създава основна секция чрез CONFIGURATION()
. Там се посочва името на конфигурацията, което по-късно се ползва за достъп до нея от програмата, както и името на файла, в който ще се съхранява и от който ще се чете тази конфигурация.
В тази основна секция се създават всички секции (SECTION
) и свойства (PROPERTY
), които са необходими. Всяка секция може да има свои подсекции и свойства и т.н.
Тъй като това са макроси и може да влязат в конфликт с други, вече налични в системата макроси, при наличие на такъв конфликт може да се ползват алтернативните, които имат RUECONFLIB_
като представка, напр. RUECONFLIB_CONFIGURATION
. Библиотеката автоматично открива конфликтите и ги избягва, като не създава макроси от основния тип, ако те са в конфликт с вече съществуващи такива. Това, от своя страна позволява промяна и разширяване на възможностите на макросите, ако това е необходимо.
Реализацията на този заглавен файл става посредством следния код:
#define RUECONFLIB_IMPLEMENT_CONFIGURATION
#include "config.h"
Този код трябва да присъства само веднъж в кода, напр. в отделен файл config.cpp
. Както се вижда изпълнимата част се реализира от същия код, който се ползва и за създаване на заглавния файл.
Достъпът до параметрите е изключително бърз и лесен и може да бъде реализиран по следните начини:
string s = Config::MainSection::AA::AAB::TestString;
using namespace Config::MainSection::AA::AAA;
int i = TestInt;
double d = TestDouble;
Както се вижда, всички секции и самата конфигурация са реализирани чрез именни пространства, което дава възможност за опростен достъп до избрана секция чрез using namespace
, както е показано във втория пример.