Introdução à biblioteca fmt para C++
\n\nA biblioteca fmt (ou fmtlib) é uma biblioteca moderna, rápida e segura para formatação de strings em C++. Ela oferece uma alternativa para funções obsoletas como printf e sprintf, bem como para os fluxos complicados de std::stringstream. O principal objetivo do fmt é tornar a formatação de strings simples, type-safe, extensível e eficiente.
Por que o fmt é necessário? Primeiro, ele resolve o problema de segurança de tipos. O printf não verifica os tipos dos argumentos, o que leva a comportamentos indefinidos e bugs difíceis de encontrar. O fmt, por outro lado, usa templates do C++ e verifica os tipos em tempo de compilação. Segundo, o fmt é significativamente mais rápido que std::stringstream e frequentemente mais rápido que printf. Terceiro, sua sintaxe é intuitiva e lembra a formatação em Python, facilitando a transição entre linguagens. Tanto que o fmt serviu de base para o std::format, que foi adotado no padrão C++20.
Neste site pythonlib.ru, falamos frequentemente sobre Python, mas o fmt é um excelente exemplo de como boas ideias do Python migraram para o mundo C++ e se tornaram o padrão de facto. Se você programa em C++ e quer fazer isso de forma moderna, o fmt é uma biblioteca obrigatória no seu arsenal.
\n\nInstalação da biblioteca fmt
\n\nInstalação através de gerenciadores de pacotes (Conan, vcpkg)
\n\nA maneira mais simples de instalar o fmt em um projeto C++ moderno é usar um gerenciador de pacotes.
\n\nConan:
\nconan install fmt/10.1.1@\n# ou no seu conanfile.txt:\n# [requires]\n# fmt/10.1.1\n\nvcpkg:
\nvcpkg install fmt\n# Em seguida, no CMakeLists.txt:\n# find_package(fmt CONFIG REQUIRED)\n# target_link_libraries(your_project PRIVATE fmt::fmt)\n\nInstalação manual (compilação a partir do código fonte)
\n\nVocê pode baixar o código fonte do GitHub e compilá-lo usando CMake:
\ngit clone https://github.com/fmtlib/fmt.git\ncd fmt\nmkdir build && cd build\ncmake ..\nmake -j4\nsudo make install\n\nInstalação via pip (para uso em extensões Python)
\n\nEmbora o fmt seja uma biblioteca C++, ela pode ser instalada como um pacote Python se você estiver escrevendo uma extensão em C++ usando pybind11 ou cppyy:
\npip install fmt\nNo entanto, no contexto de C++ puro, isso não faz sentido. Normalmente, você apenas inclui os arquivos de cabeçalho.
\n\nVinculação ao projeto (modo header-only)
\n\nO fmt pode ser usado no modo header-only, bastando copiar a pasta include/fmt para o seu projeto e adicionar:
#define FMT_HEADER_ONLY\n#include "fmt/core.h"\n#include "fmt/format.h"\n\nInício rápido com exemplo de código
\n\nVamos começar com o exemplo mais simples, que demonstra a formatação básica:
\n\n#include <fmt/core.h>\n#include <fmt/format.h>\n#include <iostream>\n\nint main() {\n // Formatação mais simples\n std::string message = fmt::format("Olá, {}! Você tem {} anos.", "Mundo", 42);\n std::cout << message << std::endl;\n\n // Saída para stdout\n fmt::print("O número Pi é aproximadamente {:.2f}\\n", 3.14159);\n\n // Formatação com argumentos nomeados (estilo C++20)\n fmt::print("Usuário: {name}, Idade: {age}\\n",\n fmt::arg("name", "Alice"),\n fmt::arg("age", 30));\n\n return 0;\n}\n\nEste código exibirá:
\nOlá, Mundo! Você tem 42 anos.\nO número Pi é aproximadamente 3.14\nUsuário: Alice, Idade: 30\n\nComo você pode ver, a sintaxe {} é muito semelhante à do Python. Tudo é intuitivo e legível.
Principais métodos e funções da biblioteca fmt
\n\nAbaixo está uma análise detalhada das principais funções do fmt. Veremos suas assinaturas, parâmetros e exemplos
Também na biblioteca
Parsing de HTML em Go: visão geral das bibliotecas e exemplos de código