此读数很好,但是toml ++主页更好。配x
以下示例有利于简洁。如果您喜欢完整的API文档和许多特定代码段,请访问项目主页
给定一个toml文件configuration.toml包含以下内容:
[ library ]
name = " toml++ "
authors = [ " Mark Gillard <[email protected]> " ]
[ dependencies ]
cpp = 17使用TOML ++,在C ++中阅读它很容易:
# 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中。json5,例如:
depends: [
'tomlpp^3.4.0',
]
什么是DDS?
通过将以下条目添加tomlplusplus您的.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() |
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 | 布尔 | 可以支持宽和窄字符串之间的透明转换。 | Windows上有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 | 类型名称 | 如果您需要比STD ::可选的更好的东西,则覆盖库使用的optional<T>类型。 | 不明确的 |
TOML_SMALL_FLOAT_TYPE | 类型名称 | 如果您的代码库具有自定义的“小浮点”类型(例如半精确),则可以告诉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解码是使用基于Bjoern Hoehrmann的“灵活且经济的UTF-8解码器”的状态机执行的。
toml::path S功能有关错误报告和功能请求,请考虑使用GitHub上的问题系统。尽管如此,您还是欢迎您通过其他方式伸出援手。按照可能的响应时间: