ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   JSON Configuration system (https://forum.antichat.xyz/showthread.php?t=1475898)

Receiver 01.05.2023 18:41

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

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

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

C++:





[CODE]
#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.: Библиотека создаёт глобальную переменную
Код:

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

Цитата:

Сообщение от kin4stat

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

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

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

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

Receiver 02.05.2023 10:32

Цитата:

Сообщение от kin4stat

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

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

kin4stat 02.05.2023 10:33

Цитата:

Сообщение от Receiver

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

Взять protobuf

Receiver 02.05.2023 12:24

Цитата:

Сообщение от kin4stat

Взять protobuf

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


Время: 05:47