Abseil 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 ao Abseil: o que é e para que serve

\n\n

Abseil (pronuncia-se "ab-sil") é uma biblioteca aberta para a linguagem C++, desenvolvida no Google. Ela foi projetada para complementar a biblioteca padrão do C++ (STL) e fornece um conjunto de componentes de alta qualidade, bem testados e eficientes, que são usados internamente no Google para desenvolver praticamente todos os projetos em C++.

\n\n

Para que serve o Abseil? Principais motivos:

\n
    \n
  • Preenchendo lacunas da STL: A biblioteca padrão do C++ evolui lentamente. O Abseil oferece soluções prontas para tarefas que surgem frequentemente na prática, mas que ainda não foram incorporadas ao padrão (por exemplo, manipulação de strings, flags de linha de comando, tabelas hash).
  • \n
  • Alta performance: O código do Abseil é otimizado para processadores e compiladores modernos. Muitos algoritmos são implementados considerando cache de memória e instruções SIMD.
  • \n
  • Segurança e confiabilidade: A biblioteca é ativamente usada no ambiente de produção do Google, o que garante sua estabilidade. Todas as funções possuem verificação rigorosa de limites e tipos.
  • \n
  • Compatibilidade: O Abseil funciona com todos os principais compiladores (GCC, Clang, MSVC) e sistemas operacionais (Linux, macOS, Windows).
  • \n
  • Modularidade: Você pode usar apenas os componentes que precisa, sem precisar incluir toda a biblioteca.
  • \n
\n\n

O Abseil consiste em vários módulos-chave:

\n
    \n
  • absl/strings: Funções avançadas para manipulação de strings (divisão, junção, substituição, formatação).
  • \n
  • absl/container: Contêineres adicionais (flat_hash_map, flat_hash_set, InlinedVector, etc.).
  • \n
  • absl/flags: Sistema poderoso para processamento de flags de linha de comando.
  • \n
  • absl/time: Trabalho com tempo e fusos horários.
  • \n
  • absl/status: Tratamento aprimorado de erros (StatusOr, Status).
  • \n
  • absl/algorithm: Algoritmos adicionais (contains, clamp, etc.).
  • \n
\n\n

Instalação do Abseil

\n\n

Ao contrário de Python ou JavaScript, as bibliotecas C++ não são instaladas via pip ou npm. O Abseil é distribuído como código-fonte, que precisa ser compilado usando CMake ou Bazel. Vamos considerar a forma mais popular: compilação via CMake.

\n\n

Instalação via vcpkg (recomendado para Windows)

\n

vcpkg é um gerenciador de pacotes para C++ da Microsoft.

\n
git clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n.\\bootstrap-vcpkg.bat\n.\\vcpkg install abseil:x64-windows
\n\n

Instalação via Conan

\n

Conan é outro gerenciador de pacotes popular.

\n
pip install conan\nconan install abseil/20230801.0@
\n\n

Compilação manual via CMake

\n
git clone https://github.com/abseil/abseil-cpp.git\ncd abseil-cpp\nmkdir build && cd build\ncmake .. -DCMAKE_INSTALL_PREFIX=/usr/local\ncmake --build . --target install
\n\n

Vinculação no CMakeLists.txt

\n
find_package(absl REQUIRED)\ntarget_link_libraries(my_project\n    absl::strings\n    absl::flat_hash_map\n    absl::flags\n)
\n\n

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

\n\n

Vamos escrever um programa simples que usa Abseil para manipulação de strings e flags de linha de comando.

\n\n
#include <iostream>\n#include "absl/strings/str_join.h"\n#include "absl/flags/flag.h"\n#include "absl/flags/parse.h"\n\nABSL_FLAG(std::string, name, "World", "Nome para saudação");\n\nint main(int argc, char* argv[]) {\n    absl::ParseCommandLine(argc, argv);\n\n    std::vector<std::string> words = {"Olá", absl::GetFlag(FLAGS_name), "!"};\n    std::string greeting = absl::StrJoin(words, " ");\n\n    std::cout << greeting << std::endl;\n    return 0;\n}
\n\n

Compilação

Recommendations