fmt para C++: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução à biblioteca fmt para C++

\n\n

A 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.

\n\n

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.

\n\n

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\n

Instalação da biblioteca fmt

\n\n

Instalação através de gerenciadores de pacotes (Conan, vcpkg)

\n\n

A maneira mais simples de instalar o fmt em um projeto C++ moderno é usar um gerenciador de pacotes.

\n\n

Conan:

\n
conan install fmt/10.1.1@\n# ou no seu conanfile.txt:\n# [requires]\n# fmt/10.1.1
\n\n

vcpkg:

\n
vcpkg install fmt\n# Em seguida, no CMakeLists.txt:\n# find_package(fmt CONFIG REQUIRED)\n# target_link_libraries(your_project PRIVATE fmt::fmt)
\n\n

Instalação manual (compilação a partir do código fonte)

\n\n

Você pode baixar o código fonte do GitHub e compilá-lo usando CMake:

\n
git clone https://github.com/fmtlib/fmt.git\ncd fmt\nmkdir build && cd build\ncmake ..\nmake -j4\nsudo make install
\n\n

Instalação via pip (para uso em extensões Python)

\n\n

Embora 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:

\n
pip install fmt
\n

No entanto, no contexto de C++ puro, isso não faz sentido. Normalmente, você apenas inclui os arquivos de cabeçalho.

\n\n

Vinculação ao projeto (modo header-only)

\n\n

O fmt pode ser usado no modo header-only, bastando copiar a pasta include/fmt para o seu projeto e adicionar:

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

Início rápido com exemplo de código

\n\n

Vamos 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\n

Este código exibirá:

\n
Olá, Mundo! Você tem 42 anos.\nO número Pi é aproximadamente 3.14\nUsuário: Alice, Idade: 30
\n\n

Como você pode ver, a sintaxe {} é muito semelhante à do Python. Tudo é intuitivo e legível.

\n\n

Principais métodos e funções da biblioteca fmt

\n\n

Abaixo está uma análise detalhada das principais funções do fmt. Veremos suas assinaturas, parâmetros e exemplos

Recommendations