fmt pour C++ : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à la bibliothèque fmt pour C++

La bibliothèque fmt (ou fmtlib) est une bibliothèque moderne, rapide et sécurisée pour le formatage de chaînes en C++. Elle offre une alternative aux fonctions obsolètes comme printf et sprintf, ainsi qu'aux lourds flux std::stringstream. L'objectif principal de fmt est de rendre le formatage de chaînes simple, type-safe, extensible et performant.

Pourquoi utiliser fmt ? Premièrement, elle résout le problème de la sécurité des types. printf ne vérifie pas les types des arguments, ce qui entraîne des comportements indéfinis et des bugs difficiles à détecter. fmt utilise quant à elle les templates C++ et vérifie les types à la compilation. Deuxièmement, fmt est bien plus rapide que std::stringstream, et souvent plus rapide que printf. Troisièmement, sa syntaxe intuitive rappelle le formatage en Python, ce qui facilite la transition entre les langages. Au point que fmt a servi de base à std::format, adopté dans le standard C++20.

Sur ce site pythonlib.fr, nous parlons souvent de Python, mais fmt est un excellent exemple de la façon dont les bonnes idées de Python ont migré vers le monde du C++ pour y devenir un standard de facto. Si vous codez en C++ et souhaitez le faire de manière moderne, fmt est une bibliothèque incontournable dans votre arsenal.

Installation de la bibliothèque fmt

Installation via les gestionnaires de paquets (Conan, vcpkg)

La façon la plus simple d'installer fmt dans un projet C++ moderne est d'utiliser un gestionnaire de paquets.

Conan :

conan install fmt/10.1.1@
# ou dans votre conanfile.txt :
# [requires]
# fmt/10.1.1

vcpkg :

vcpkg install fmt
# Ensuite dans CMakeLists.txt :
# find_package(fmt CONFIG REQUIRED)
# target_link_libraries(your_project PRIVATE fmt::fmt)

Installation manuelle (compilation depuis les sources)

Vous pouvez télécharger le code source depuis GitHub et le compiler avec CMake :

git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build && cd build
cmake ..
make -j4
sudo make install

Installation via pip (pour une utilisation dans les extensions Python)

Bien que fmt soit une bibliothèque C++, elle peut être installée comme un paquet Python si vous développez une extension C++ avec pybind11 ou cppyy :

pip install fmt

Cependant, dans un contexte C++ pur, cela n'a pas de sens. En général, vous incluez simplement les fichiers d'en-tête.

Intégration au projet (mode header-only)

fmt peut être utilisé en mode header-only en copiant simplement le dossier include/fmt dans votre projet et en ajoutant :

#define FMT_HEADER_ONLY
#include "fmt/core.h"
#include "fmt/format.h"

Démarrage rapide avec un exemple de code

Commençons par l'exemple le plus simple qui illustre le formatage de base :

#include <fmt/core.h>
#include <fmt/format.h>
#include <iostream>

int main() {
    // Formatage simple
    std::string message = fmt::format("Bonjour, {} ! Tu as {} ans.", "le monde", 42);
    std::cout << message << std::endl;

    // Affichage dans stdout
    fmt::print("Le nombre Pi est environ {:.2f}\n", 3.14159);

    // Formatage avec arguments nommés (style C++20)
    fmt::print("Utilisateur : {name}, Âge : {age}\n",
               fmt::arg("name", "Alice"),
               fmt::arg("age", 30));

    return 0;
}

Ce code affichera :

Bonjour, le monde ! Tu as 42 ans.
Le nombre Pi est environ 3.14
Utilisateur : Alice, Âge : 30

Comme vous pouvez le voir, la syntaxe {} est très similaire à celle de Python. Tout est intuitif et lisible.

Méthodes et fonctions principales de la bibliothèque fmt

Voici une analyse détaillée des fonctions clés de fmt. Nous examinerons leurs signatures, paramètres et exemples d'utilisation.

1. fmt::format

Description :

Recommendations