️ Este readme está bien, pero la página de inicio Toml ++ es mejor. ️
El siguiente ejemplo favorece la brevedad. Si prefiere la documentación completa de la API y muchos fragmentos de código específico, visite la página de inicio del proyecto
Dada una configuration.toml de archivo Toml.toml que contiene lo siguiente:
[ library ]
name = " toml++ "
authors = [ " Mark Gillard <[email protected]> " ]
[ dependencies ]
cpp = 17Leerlo en C ++ es fácil con 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 " ;
Encontrará algunos ejemplos de código más en el directorio examples y mucho más como parte de la documentación de la API.
toml++ viene en dos sabores: un solo cabezal y regular. La API es la misma para ambos.
toml.hpp donde quieras en tu árbol fuentetomlplusplus/include a sus rutas de incluido#include <toml++/toml.hpp> Agregue tomlplusplus/3.4.0 a su File Conan.
Agregue tomlpp a su package.json5 , por ejemplo:
depends: [
'tomlpp^3.4.0',
]
¿Qué es DDS?
tomlplusplus se puede usar fácilmente en proyectos Tipi .tipi/deps
{
"marzer/tomlplusplus" : {}
} vcpkg install tomlplusplus
Puede instalar la envoltura con:
meson wrap install tomlplusplus
Después de eso, puede usarlo como una dependencia regular:
tomlplusplus_dep = dependency ( ' tomlplusplus ' )También puede agregarlo como subproyecto directamente.
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)¿Qué es FetchContent?
git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git tomlplusplus
El ecosistema de herramientas C ++ es una pesadilla fractal de caos desenfrenado, así que, naturalmente, no estoy al día con todas las opciones de embalaje e integración disponibles. Sin embargo, siempre estoy feliz de ver otros nuevos apoyados. Si hay alguna integración que le gustaría ver y tener los conocimientos técnicos para que esto suceda, no dude en hacer una solicitud de extracción.
Si solo desea consumir toml++ como una biblioteca regular, entonces no tiene dependencias de qué preocuparse. Sin embargo, hay algunas dependencias relacionadas con las pruebas de tener en cuenta si está trabajando en la biblioteca. Ver contribuyendo para obtener información.
Varias opciones configurables están expuestas en forma de preprocesador #defines lo más probable es que no necesite meterse con ellas, pero si lo hace, configúrelas antes de incluir TOML ++.
| Opción | Tipo | Descripción | Por defecto |
|---|---|---|---|
TOML_ASSERT(expr) | función macro | Establece la función Afirmar utilizada por la biblioteca. | assert() |
TOML_CALLCONV | definir | La convención de llamadas para aplicar a las funciones gratuitas/estáticas exportadas. | indefinido |
TOML_CONFIG_HEADER | cuerda literal | Incluye el archivo de encabezado dado antes del resto de la biblioteca. | indefinido |
TOML_ENABLE_FORMATTERS | booleano | Habilita los formatters. Establezca en 0 si no necesita que mejoren los tiempos de compilación y el tamaño binario. | 1 |
TOML_ENABLE_FLOAT16 | booleano | Habilita el soporte para el tipo _Float16 incorporado. | por configuración del compilador |
TOML_ENABLE_PARSER | booleano | Habilita el analizador. Establezca en 0 si no lo necesita para mejorar los tiempos de compilación y el tamaño binario. | 1 |
TOML_ENABLE_UNRELEASED_FEATURES | booleano | Permite el soporte para las características inéditas del idioma TomL. | 0 |
TOML_ENABLE_WINDOWS_COMPAT | booleano | Permite el soporte para la conversión transparente entre cadenas anchas y estrechas. | 1 en Windows |
TOML_EXCEPTIONS | booleano | Establece si la biblioteca usa excepciones. | por configuración del compilador |
TOML_EXPORTED_CLASS | definir | Anotación de exportación de API para agregar a las clases. | indefinido |
TOML_EXPORTED_MEMBER_FUNCTION | definir | Anotación de exportación de API para agregar a funciones de miembros de clase no estatales. | indefinido |
TOML_EXPORTED_FREE_FUNCTION | definir | Anotación de exportación de API para agregar a funciones gratuitas. | indefinido |
TOML_EXPORTED_STATIC_FUNCTION | definir | Anotación de exportación de API para agregar a las funciones estáticas. | indefinido |
TOML_HEADER_ONLY | booleano | Deshabilite esto para controlar explícitamente dónde se compila la implementación de Toml ++ (por ejemplo, como parte de una biblioteca). | 1 |
TOML_IMPLEMENTATION | definir | Defina esto para habilitar la compilación de la implementación de la biblioteca cuando TOML_HEADER_ONLY == 0 . | indefinido |
TOML_OPTIONAL_TYPE | Tipo de nombre | Anula el tipo optional<T> utilizado por la biblioteca si necesita algo mejor que std :: opcional. | indefinido |
TOML_SMALL_FLOAT_TYPE | Tipo de nombre | Si su base de código tiene un tipo personalizado de 'flotador pequeño' (por ejemplo, medios precisiones), esto le dice a TomL ++ al respecto. | indefinido |
TOML_SMALL_INT_TYPE | Tipo de nombre | Si su base de código tiene un tipo de 'entero pequeño' personalizado (por ejemplo, 24 bits), esto le dice a TomL ++ al respecto. | indefinido |
Varios de estos tienen implicaciones ABI; La biblioteca utiliza espacios de nombres en línea para evitar que vincule accidentalmente combinaciones incompatibles juntas.
En cualquier momento, la biblioteca tiene como objetivo admitir cualquier versión más recientemente lanzada de Toml, con el soporte de suscripción para una serie de características inéditas del Toml Master y algunos pilas de cerezos sanos de la lista de Toml Tusss, donde la discusión indica fuertemente la inclusión en una liberación de futura cercana.
La biblioteca anuncia la versión de idioma numerada más reciente que admite plenamente a través del preprocesador define TOML_LANG_MAJOR , TOML_LANG_MINOR y TOML_LANG_PATCH .
+ en nombres clave09:30 en lugar de 09:30:00e secuencia de código de escape (taquigrafía para u001B )xHH
#define TOML_ENABLE_UNRELEASED_FEATURES 1para habilitar estas características (ver configuración).
Todas las características admitidas, incluyendo:
Todas las características compatibles.
¡Las contribuciones son muy bienvenidas! Ya sea informando problemas o enviando solicitudes de extracción. Si desea enviar una solicitud de extracción, consulte la contribución de todos los detalles que necesita para comenzar.
TomL ++ tiene licencia bajo los términos de la licencia MIT - ver licencia.
La decodificación UTF-8 se realiza utilizando una máquina de estado basada en el 'decodificador UTF-8 flexible y económico de Bjoern Hoehrmann.
toml::path SPara informes de errores y solicitudes de funciones, considere usar el sistema de problemas aquí en GitHub. Para cualquier otra cosa, aunque puede llegar a través de otros medios. En orden de tiempo de respuesta probable: