️ Cette lecture est bien, mais la page d'accueil Toml ++ est meilleure. ️
L'exemple suivant favorise la brièveté. Si vous préférez la documentation complète de l'API et de nombreux extraits de code spécifiques à la place, visitez la page d'accueil du projet
Étant donné un fichier Toml configuration.toml contenant les éléments suivants:
[ library ]
name = " toml++ "
authors = [ " Mark Gillard <[email protected]> " ]
[ dependencies ]
cpp = 17Le lire en C ++ est facile avec 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 " ;
Vous trouverez d'autres exemples de code dans le répertoire examples , et bien plus encore dans le cadre de la documentation de l'API.
toml++ est disponible en deux saveurs: un seul tête et régulier. L'API est la même pour les deux.
toml.hpp où que vous voudriez dans votre arbre sourcetomlplusplus/include à vos chemins d'inclusion#include <toml++/toml.hpp> Ajoutez tomlplusplus/3.4.0 à votre conanfile.
Ajoutez tomlpp à votre package.json5 , par exemple:
depends: [
'tomlpp^3.4.0',
]
Qu'est-ce que DDS?
tomlplusplus peut être facilement utilisé dans les projets Tipi.build en ajoutant l'entrée suivante à vos .tipi/deps :
{
"marzer/tomlplusplus" : {}
} vcpkg install tomlplusplus
Vous pouvez installer le wrap avec:
meson wrap install tomlplusplus
Après cela, vous pouvez l'utiliser comme une dépendance régulière:
tomlplusplus_dep = dependency ( ' tomlplusplus ' )Vous pouvez également l'ajouter directement sous forme de sous-projet.
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'est-ce que FetchContent?
git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git tomlplusplus
L'écosystème d'outillage C ++ est un fractal de cauchemar de chaos effréné, donc naturellement je ne suis pas à l'échelle avec toutes les options d'emballage et d'intégration disponibles. Je suis toujours heureux de voir de nouveaux soutenus, cependant! S'il y a une intégration que vous aimeriez voir et que vous avez le savoir-faire technique pour y arriver, n'hésitez pas à faire une demande de traction.
Si vous voulez simplement consommer toml++ en tant que bibliothèque ordinaire, vous n'avez aucune dépendance à vous soucier. Cependant, il y a quelques dépendances liées aux tests à savoir si vous travaillez sur la bibliothèque. Voir contribuer à des informations.
Un certain nombre d'options configurables sont exposées sous forme de préprocesseur #defines vous n'aurez probablement pas du tout de gâcher avec ces derniers, mais si vous le faites, définissez-les avant d'inclure Toml ++.
| Option | Taper | Description | Défaut |
|---|---|---|---|
TOML_ASSERT(expr) | macro de fonction | Définit la fonction Assert utilisée par la bibliothèque. | assert() |
TOML_CALLCONV | définir | Appel à la convention pour s'appliquer aux fonctions libres / statiques exportées. | indéfini |
TOML_CONFIG_HEADER | corde littérale | Comprend le fichier d'en-tête donné avant le reste de la bibliothèque. | indéfini |
TOML_ENABLE_FORMATTERS | booléen | Active les formateurs. Réglé sur 0 si vous n'en avez pas besoin pour améliorer les temps de compilation et la taille binaire. | 1 |
TOML_ENABLE_FLOAT16 | booléen | Permet la prise en charge du type _Float16 intégré. | Paramètres par compilateur |
TOML_ENABLE_PARSER | booléen | Active l'analyseur. Réglé sur 0 si vous n'en avez pas besoin pour améliorer les temps de compilation et la taille binaire. | 1 |
TOML_ENABLE_UNRELEASED_FEATURES | booléen | Permet la prise en charge des fonctionnalités de langage Toml non publiées. | 0 |
TOML_ENABLE_WINDOWS_COMPAT | booléen | Permet la prise en charge de la conversion transparente entre les chaînes larges et étroites. | 1 sur Windows |
TOML_EXCEPTIONS | booléen | Définit si la bibliothèque utilise des exceptions. | Paramètres par compilateur |
TOML_EXPORTED_CLASS | définir | Annotation d'exportation de l'API à ajouter aux classes. | indéfini |
TOML_EXPORTED_MEMBER_FUNCTION | définir | Annotation d'exportation de l'API pour ajouter aux fonctions des membres de la classe non statique. | indéfini |
TOML_EXPORTED_FREE_FUNCTION | définir | Annotation d'exportation de l'API pour ajouter aux fonctions libres. | indéfini |
TOML_EXPORTED_STATIC_FUNCTION | définir | Annotation d'exportation de l'API pour ajouter aux fonctions statiques. | indéfini |
TOML_HEADER_ONLY | booléen | Désactivez cela pour contrôler explicitement où l'implémentation de Toml ++ est compilée (par exemple dans le cadre d'une bibliothèque). | 1 |
TOML_IMPLEMENTATION | définir | Définissez cela pour permettre la compilation de l'implémentation de la bibliothèque lorsque TOML_HEADER_ONLY == 0 . | indéfini |
TOML_OPTIONAL_TYPE | nom de type | Remplace le type optional<T> utilisé par la bibliothèque si vous avez besoin de quelque chose de mieux que std :: facultatif. | indéfini |
TOML_SMALL_FLOAT_TYPE | nom de type | Si votre base de code a un type de «petit flotteur» personnalisé (par exemple la demi-précision), cela en parle à Toml ++. | indéfini |
TOML_SMALL_INT_TYPE | nom de type | Si votre base de code a un type de «petit entier» personnalisé (par exemple 24 bits), cela en parle à Toml ++. | indéfini |
Un certain nombre d'entre eux ont des implications ABI; La bibliothèque utilise des espaces de noms en ligne pour vous empêcher de lier accidentellement des combinaisons incompatibles ensemble.
À tout moment, la bibliothèque vise à prendre en charge la version la plus récemment publiée de Toml, avec une prise en charge de l'opt-in pour un certain nombre de fonctionnalités inédites du Toml Master et des cueilles de cerise saines de la liste des problèmes Toml où la discussion indique fortement l'inclusion dans une version proche du futur.
La bibliothèque annonce la version linguistique numérotée la plus récente qu'il prend en charge entièrement via le préprocesseur définit TOML_LANG_MAJOR , TOML_LANG_MINOR et TOML_LANG_PATCH .
+ dans les noms clés09:30 par opposition à 09:30:00e (sténographie pour u001B )xHH
#define TOML_ENABLE_UNRELEASED_FEATURES 1pour activer ces fonctionnalités (voir configuration).
Toutes les fonctionnalités prises en charge, y compris:
Toutes les fonctionnalités prises en charge.
Les contributions sont les bienvenues! Soit en signalant des problèmes, soit en soumettant des demandes de traction. Si vous souhaitez soumettre une demande de traction, veuillez consulter la contribution pour tous les détails dont vous avez besoin pour commencer.
Toml ++ est sous licence en vertu des termes de la licence MIT - voir la licence.
Le décodage UTF-8 est effectué à l'aide d'une machine d'État basée sur le «décodeur UTF-8 flexible et économique» de Bjoern Hoehrmann.
toml::path SPour les rapports de bogues et les demandes de fonctionnalités, veuillez envisager d'utiliser le système des problèmes ici sur GitHub. Pour toute autre chose, vous êtes les bienvenus pour tendre la main par d'autres moyens. Par ordre de temps de réponse probable: