️ Este ReadMe está bem, mas a página inicial do Toml ++ é melhor. ️
O exemplo a seguir favorece a brevidade. Se você preferir a documentação completa da API e muitos trechos de código específicos, visite a página inicial do projeto
Dado uma configuration.toml de arquivo Toml.toml contendo o seguinte:
[ library ]
name = " toml++ "
authors = [ " Mark Gillard <[email protected]> " ]
[ dependencies ]
cpp = 17Lê -lo em C ++ é fácil com 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 " ;
Você encontrará mais alguns exemplos de código no diretório examples e muito mais como parte da documentação da API.
toml++ vem em dois sabores: cabeçalho único e regular. A API é a mesma para ambos.
toml.hpp onde quiser em sua árvore de origemtomlplusplus/include seus caminhos de incluir#include <toml++/toml.hpp> Adicione tomlplusplus/3.4.0 ao seu Conanfile.
Adicione tomlpp ao seu package.json5 , por exemplo:
depends: [
'tomlpp^3.4.0',
]
O que é DDS?
tomlplusplus pode ser facilmente usado em projetos Tipi.Build, adicionando a seguinte entrada ao seu .tipi/deps :
{
"marzer/tomlplusplus" : {}
} vcpkg install tomlplusplus
Você pode instalar o envoltório com:
meson wrap install tomlplusplus
Depois disso, você pode usá -lo como uma dependência regular:
tomlplusplus_dep = dependency ( ' tomlplusplus ' )Você também pode adicioná -lo como um subprojeto diretamente.
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)O que é FetchContent?
git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git tomlplusplus
O ecossistema de ferramentas C ++ é um pesadelo fractal do caos desenfreado, então, naturalmente, não estou atualizado com todas as opções de embalagem e integração disponíveis. Eu sempre fico feliz em ver novos apoiados, no entanto! Se houver alguma integração que você gostaria de ver e tenha o conhecimento técnico para que isso aconteça, fique à vontade para fazer uma solicitação de tração.
Se você deseja apenas consumir toml++ como uma biblioteca regular, não tem nenhuma dependência com que se preocupar. No entanto, existem algumas dependências relacionadas a testes a serem cientes, se você estiver trabalhando na biblioteca. Consulte Contribuindo para obter informações.
Várias opções configuráveis são expostas na forma de pré -processador #defines provavelmente você não precisará mexer com elas, mas, se o fizer, defina -as antes de incluir Toml ++.
| Opção | Tipo | Descrição | Padrão |
|---|---|---|---|
TOML_ASSERT(expr) | função macro | Define a função assert usada pela biblioteca. | assert() |
TOML_CALLCONV | definir | Chamando a Convenção para se inscrever em funções gratuitas/estáticas exportadas. | indefinido |
TOML_CONFIG_HEADER | String literal | Inclui o arquivo de cabeçalho fornecido antes do restante da biblioteca. | indefinido |
TOML_ENABLE_FORMATTERS | booleano | Ativa os formatados. Defina como 0 se você não precisar deles para melhorar os tempos de compilação e o tamanho binário. | 1 |
TOML_ENABLE_FLOAT16 | booleano | Ativa o suporte para o tipo interno _Float16 . | por configurações do compilador |
TOML_ENABLE_PARSER | booleano | Ativa o analisador. Defina como 0 se você não precisar para melhorar os tempos de compilação e o tamanho binário. | 1 |
TOML_ENABLE_UNRELEASED_FEATURES | booleano | Ativa o suporte a recursos não lançados da linguagem TOML. | 0 |
TOML_ENABLE_WINDOWS_COMPAT | booleano | Permite o suporte para conversão transparente entre cordas largas e estreitas. | 1 nas janelas |
TOML_EXCEPTIONS | booleano | Define se a biblioteca usa exceções. | por configurações do compilador |
TOML_EXPORTED_CLASS | definir | Anotação de exportação da API para adicionar às aulas. | indefinido |
TOML_EXPORTED_MEMBER_FUNCTION | definir | Anotação de exportação da API para adicionar a funções não estáticas de membro da classe. | indefinido |
TOML_EXPORTED_FREE_FUNCTION | definir | Anotação de exportação da API para adicionar às funções gratuitas. | indefinido |
TOML_EXPORTED_STATIC_FUNCTION | definir | Anotação de exportação da API para adicionar às funções estáticas. | indefinido |
TOML_HEADER_ONLY | booleano | Desative isso para controlar explicitamente onde a implementação do TOML ++ é compilada (por exemplo, como parte de uma biblioteca). | 1 |
TOML_IMPLEMENTATION | definir | Defina isso para ativar a compilação da implementação da biblioteca quando TOML_HEADER_ONLY == 0 . | indefinido |
TOML_OPTIONAL_TYPE | Nome do tipo | Substitui o tipo optional<T> usado pela biblioteca se você precisar de algo melhor do que o STD :: Opcional. | indefinido |
TOML_SMALL_FLOAT_TYPE | Nome do tipo | Se a sua base de código tiver um tipo de 'float pequeno' personalizado (por exemplo, meia precisão), isso informa a Toml ++ sobre isso. | indefinido |
TOML_SMALL_INT_TYPE | Nome do tipo | Se a sua base de código tiver um tipo 'inteiro pequeno' personalizado (por exemplo, 24 bits), isso informa a Toml ++ sobre isso. | indefinido |
Vários deles têm implicações de ABI; A biblioteca usa namespaces embutidos para impedir que você vincule acidentalmente combinações incompatíveis.
A qualquer momento, a biblioteca visa suportar qualquer que seja a versão mais recentemente lançada do TOML, com suporte de opção para vários recursos não lançados do Toml Master e alguns sãos que escolhem a lista Toml Issues, onde a discussão indica fortemente a inclusão em um lançamento próximo.
A biblioteca anuncia a versão de linguagem numerada mais recente que suporta totalmente através do pré -processador define TOML_LANG_MAJOR , TOML_LANG_MINOR e TOML_LANG_PATCH .
+ em nomes -chave09:30 , em vez de 09:30:00e sequência de código de escape (abreviação de u001B )xHH
#define TOML_ENABLE_UNRELEASED_FEATURES 1Para ativar esses recursos (consulte a configuração).
Todos os recursos suportados, incluindo:
Todos os recursos suportados.
As contribuições são muito bem -vindas! Relatando questões ou enviando solicitações de tração. Se você deseja enviar uma solicitação de tração, consulte a contribuição de todos os detalhes necessários para continuar.
O TOML ++ está licenciado nos termos da licença do MIT - consulte a licença.
A decodificação do UTF-8 é realizada usando uma máquina de estado baseada no 'decodificador UTF-8 flexível e econômico do Bjoern Hoehrmann.
toml::path SPara relatórios de bugs e solicitações de recursos, considere usar o sistema de problemas aqui no GitHub. Para qualquer outra coisa, você pode chegar a alcançar por outros meios. Em ordem de provável tempo de resposta: