PDA

Просмотр полной версии : JSON Configuration system


Receiver
01.05.2023, 18:41
Описание: Конфигурационная система упрощающая загрузку, сохранение и использование переменных в JSON.

Исходник: https://github.com/Receiver1/json_config_system

Пример использования:

C++:






#include "config.hpp"
#include
#include
#include
#include
// Все переменные нужно оборачивать в класс
config
::
ConfigVariable_t

string
{
"string"
,
std
::
string
{
}
}
;
config
::
ConfigVariable_t
>
vector_of_integers
{
"vector_of_integers"
,
{
1
,
2
,
3
}
}
;
// Сужающее преобразование типов
void
print_vector
(
std
::
vector

vector
)
{
for
(
auto
&
iterator
:
vector
)
{
std
::
cout

clear
(
)
;
vector_of_integers
->
clear
(
)
;
// Загружаем конфиг из файла
config
::
instance
.
load
(
"test.config"
)
;
// Выводим загруженные переменные
std
::
cout



Доступные методы класса Config:

void load(std::string file_name)Загружает конфигурацию из файла.void save(std::string file_name)Сохраняет конфигурацию в файл.void set(std::string json)Задаёт конфигурацию из строки в формате JSON.std::string get()Отдаёт конфигурацию в формате JSON строки.void add_variable(ConfigVariableBase_t *const variable)Добавляет переменную на хранение. При использовании обёртки это делается автоматически.void set_default_path(const std::filesystem::path path)Устанавлиает путь до стандартнй папки с конфигурациями.

P.S.: Библиотека создаёт глобальную переменную
[CODE]
config::instance

, она нужна для автоматического добавления переменных на хранение.

waparabka
01.05.2023, 19:43
https://forum.antichat.xyz/attachments/28302866/

kin4stat
02.05.2023, 04:10
Эээ, а зачем, если можно просто:

C++:






struct
person
{
std
::
string name
;
std
::
string address
;
int
age
;
}
;
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
(
person
,
name
,
address
,
age
)
person p
{
"Ivan"
,
"Moscow"
,
18
}
;
json j
=
p
;
person p2
=
j
.
get

(
)
;




Или ты решил велосипед заново изобрести?

Receiver
02.05.2023, 09:32
Эээ, а зачем, если можно просто:

C++:






struct
person
{
std
::
string name
;
std
::
string address
;
int
age
;
}
;
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
(
person
,
name
,
address
,
age
)
person p
{
"Ivan"
,
"Moscow"
,
18
}
;
json j
=
p
;
person p2
=
j
.
get

(
)
;




Или ты решил велосипед заново изобрести?


Ты либо чорт, либо гений. Я эту хрень сделал чтобы прокидывать референсы на переменные в ImGui.

Как я до этого не додумался? Чёт только щас понял что у нас всего 2 эндпоинта - сохранение и загрузка.

Ну пусть будет альтернативной версией. Вот этим дефайнчиком можно себе код засрать жёстко.

Например я через свою штуку 1000 переменных сохранял одновременно.

kin4stat
02.05.2023, 09:55
Вот этим дефайнчиком можно себе код засрать жёстко.


Разбей на структуры отдельный части, и дефайни структуры отдельно, оно же рекурсивно работает…

Receiver
02.05.2023, 10:32
Разбей на структуры отдельный части, и дефайни структуры отдельно, оно же рекурсивно работает…


Слух, если ты так много знаешь... Подскажи как в msgpack рекурсивно структуры сериализовывать?

kin4stat
02.05.2023, 10:33
Слух, если ты так много знаешь... Подскажи как в msgpack рекурсивно структуры сериализовывать?


Взять protobuf

Receiver
02.05.2023, 12:24
Взять protobuf


Да пошёл ты со своим protobuf) gRPC это накидывание говна на вентилятор