️ Это чтение в порядке, но домашняя страница Toml ++ лучше. ️
Следующий пример благоприятствует краткости. Если вы предпочитаете полную документацию по API и множество конкретных фрагментов кода, посетите домашнюю страницу проекта
Учитывая configuration.toml файла toml.toml, содержащий следующее:
[ library ]
name = " toml++ "
authors = [ " Mark Gillard <[email protected]> " ]
[ dependencies ]
cpp = 17Читать его в C ++ легко с Toml ++:
# include < toml++/toml.hpp >
using namespace std ::literals ;
auto config = toml::parse_file( " configuration.toml " );
// get key-value pairs
std::string_view library_name = config[ " library " ][ " name " ].value_or( " " sv);
std::string_view library_author = config[ " library " ][ " authors " ][ 0 ].value_or( " " sv);
int64_t depends_on_cpp_version = config[ " dependencies " ][ " cpp " ].value_or( 0 );
// modify the data
config.insert_or_assign( " alternatives " , toml::array{
" cpptoml " ,
" toml11 " ,
" Boost.TOML "
});
// use a visitor to iterate over heterogenous data
config.for_each([]( auto & key, auto & value)
{
std::cout << value << " n " ;
if constexpr (toml::is_string< decltype (value)>)
do_something_with_string_values (value);
});
// you can also iterate more 'traditionally' using a ranged-for
for ( auto && [k, v] : config)
{
// ...
}
// re-serialize as TOML
std::cout << config << " n " ;
// re-serialize as JSON
std::cout << toml::json_formatter{ config } << " n " ;
// re-serialize as YAML
std::cout << toml::yaml_formatter{ config } << " n " ;
Вы найдете еще несколько примеров кода в каталоге examples и многое другое как часть документации API.
toml++ выпускается в двух вкусах: одного заголовка и обычный. API одинаков для обоих.
toml.hpp где бы вы ни нравились в своем исходном деревеtomlplusplus/include в ваши пути включения#include <toml++/toml.hpp> Добавьте tomlplusplus/3.4.0 в свой кональ.
Добавьте tomlpp в свой package.json5 , например:
depends: [
'tomlpp^3.4.0',
]
Что такое DDS?
tomlplusplus можно легко использовать в проектах tipi.build, добавив следующую запись к вашему .tipi/deps :
{
"marzer/tomlplusplus" : {}
} vcpkg install tomlplusplus
Вы можете установить обертку с:
meson wrap install tomlplusplus
После этого вы можете использовать его как обычную зависимость:
tomlplusplus_dep = dependency ( ' tomlplusplus ' )Вы также можете добавить его в виде подпроекта напрямую.
include (FetchContent)
FetchContent_Declare(
tomlplusplus
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
GIT_TAG v3.4.0
)
FetchContent_MakeAvailable(tomlplusplus)
# Example add library: target_link_libraries(MyApp tomlplusplus::tomlplusplus)Что такое FetchContent?
git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git tomlplusplus
Экосистема инструментов C ++ представляет собой фрактальный кошмар небридленного хаоса, поэтому я, естественно, не скоро нахожусь во всех доступных вариантах упаковки и интеграции. Я всегда рад видеть, что новые поддерживают, хотя! Если есть какая-то интеграция, которую вы хотели бы увидеть, и иметь технические ноу-хау, чтобы это произошло, не стесняйтесь сделать запрос на тягу.
Если вы просто хотите потреблять toml++ в качестве обычной библиотеки, то у вас нет никаких зависимостей, о которых нужно беспокоиться. Однако есть несколько зависимостей, связанных с тестированием, если вы работаете над библиотекой. См. Предоставление для информации.
Ряд настраиваемых вариантов выявляется в виде препроцессора #defines скорее всего, вам вообще не придется связываться с ними, но если вы это сделаете, установите их перед тем, чтобы включить Toml ++.
| Вариант | Тип | Описание | По умолчанию |
|---|---|---|---|
TOML_ASSERT(expr) | Функциональный макрос | Устанавливает функцию Assert, используемая библиотекой. | assert() |
TOML_CALLCONV | определять | Вызов соглашения для подачи заявки на экспортируемые бесплатные/статические функции. | неопределенный |
TOML_CONFIG_HEADER | струнный буквальный | Включает заданный файл заголовка перед остальной частью библиотеки. | неопределенный |
TOML_ENABLE_FORMATTERS | логический | Позволяет форматеры. Установите на 0 если вам не нужны, чтобы улучшить время компиляции и бинарный размер. | 1 |
TOML_ENABLE_FLOAT16 | логический | Включает поддержку встроенного типа _Float16 . | за настройки компилятора |
TOML_ENABLE_PARSER | логический | Позволяет анализатор. Установите на 0 если вам не нужно, чтобы улучшить время компиляции и бинарный размер. | 1 |
TOML_ENABLE_UNRELEASED_FEATURES | логический | Позволяет поддержать не выпущенные функции TOML. | 0 |
TOML_ENABLE_WINDOWS_COMPAT | логический | Обеспечивает поддержку прозрачного преобразования между широкими и узкими строками. | 1 на окнах |
TOML_EXCEPTIONS | логический | Устанавливает, использует ли библиотека исключения. | за настройки компилятора |
TOML_EXPORTED_CLASS | определять | API Экспорт аннотации для добавления в классы. | неопределенный |
TOML_EXPORTED_MEMBER_FUNCTION | определять | Аннотация экспорта API, чтобы добавить к нестатическим функциям члена класса. | неопределенный |
TOML_EXPORTED_FREE_FUNCTION | определять | API -аннотация для добавления в бесплатные функции. | неопределенный |
TOML_EXPORTED_STATIC_FUNCTION | определять | Экспортная аннотация API, чтобы добавить к статическим функциям. | неопределенный |
TOML_HEADER_ONLY | логический | Отключите это, чтобы явно контролировать, где внедряется реализация Toml ++ (например, как часть библиотеки). | 1 |
TOML_IMPLEMENTATION | определять | Определите это, чтобы включить компиляцию реализации библиотеки, когда TOML_HEADER_ONLY == 0 . | неопределенный |
TOML_OPTIONAL_TYPE | тип имени | Переопределяет optional<T> используемый библиотекой, если вам нужно что -то лучше, чем std :: Необязательно. | неопределенный |
TOML_SMALL_FLOAT_TYPE | тип имени | Если в вашей кодовой базе есть пользовательский тип «Small Float» (например, полуоперация), это рассказывает об этом Toml ++. | неопределенный |
TOML_SMALL_INT_TYPE | тип имени | Если в вашей кодовой базе есть пользовательский тип «маленького целого числа» (например, 24-бит), это рассказывает об этом Toml ++. | неопределенный |
Некоторые из них имеют последствия ABI; Библиотека использует встроенные пространства имен, чтобы не допустить случайного соединения несовместимых комбинаций вместе.
В любой момент времени библиотека стремится поддержать любую последнюю выпущенную версию Toml, при поддержке ряда не выпущенных функций от Toml Master и некоторых здравомыслящих вишни из списка проблем TOML, где обсуждение убедительно указывает на включение в релиз почти зажигая.
Библиотека рекламирует самую последнюю версию пронумерованной языка, которую он полностью поддерживает через препроцессор, определяет TOML_LANG_MAJOR , TOML_LANG_MINOR и TOML_LANG_PATCH .
+ в именах ключевых09:30 в отличие от 09:30:00e (сокращение для u001B )xHH
#define TOML_ENABLE_UNRELEASED_FEATURES 1чтобы включить эти функции (см. Конфигурацию).
Все функции поддерживаются, в том числе:
Все функции поддерживаются.
Взносы очень приветствуются! Либо путем отчетности о проблемах, либо отправив запросы на привлечение. Если вы хотите подать запрос на привлечение, см. Вклад для всех деталей, которые вам нужны.
Toml ++ лицензирован в соответствии с условиями лицензии MIT - см. Лицензию.
Декодирование UTF-8 выполняется с использованием государственной машины, основанной на «гибком и экономичном декодере UTF-8» Bjoern Hoehrmann.
toml::path SДля отчетов об ошибках и запросов функций, пожалуйста, рассмотрите возможность использования системы проблем здесь, на GitHub. Для чего -либо еще, хотя вы можете протянуть руку другими средствами. В порядке вероятного времени ответа: