O que é cereal e para que serve?
\n\ncereal é uma biblioteca leve, header-only para serialização de dados em linguagem C++. Ela permite transformar estruturas de dados complexas (classes, structs, contêineres STL) em formatos como JSON, XML e formato binário, e depois restaurá-los. Isso é fundamental para salvar o estado de um programa, transmitir dados pela rede, fazer logging ou trocar informações entre diferentes linguagens de programação.
\n\nAo contrário de soluções mais pesadas (como Boost.Serialization), cereal não requer compilação prévia ou configuração complexa. Ela consiste inteiramente em arquivos de cabeçalho, o que simplifica a integração em qualquer projeto. Principais vantagens:
\n- \n
- Header-only: não é necessário compilar a biblioteca separadamente. \n
- Suporte a C++11/14/17: utiliza recursos modernos da linguagem. \n
- Flexibilidade: suporta tipos personalizados, ponteiros inteligentes, polimorfismo. \n
- Desempenho: o formato binário é muito rápido e compacto. \n
Instalação
\n\nComo cereal é uma biblioteca header-only, a instalação se resume a copiar os arquivos de cabeçalho para o seu projeto. Nada de pip install ou npm install para C++ é necessário. Aqui estão duas maneiras principais:
Método 1: Instalação manual (recomendado para aprendizado)
\n- \n
- Baixe a versão mais recente do GitHub (botão verde "Code" → "Download ZIP"). \n
- Descompacte o arquivo. \n
- Copie a pasta
include/cerealpara a pasta do seu projeto. \n - No código, inclua:
#include "cereal/cereal.hpp". \n
Método 2: Através do gerenciador de pacotes vcpkg
\n# Instale o vcpkg, se ainda não estiver instalado\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n.\\bootstrap-vcpkg.bat # Windows\n./bootstrap-vcpkg.sh # Linux/macOS\n\n# Instale o cereal\n.\\vcpkg install cereal # Windows\n./vcpkg install cereal # Linux/macOS\n\n# Inclua no CMakeLists.txt:\n# find_package(cereal CONFIG REQUIRED)\n# target_link_libraries(seu_projeto PRIVATE cereal::cereal)\n\n\nInício rápido com exemplo de código
\n\nVamos criar uma estrutura simples Person e serializá-la em JSON. Crie um arquivo main.cpp:
#include <iostream>\n#include <fstream>\n#include <string>\n#include <cereal/archives/json.hpp>\n#include <cereal/types/string.hpp>\n\nstruct Person {\n std::string name;\n int age;\n\n // Método obrigatório para cereal\n template<class Archive>\n void serialize(Archive& archive) {\n archive(name, age);\n }\n};\n\nint main() {\n Person p1{"Alice", 30};\n\n // Escrita em arquivo\n {\n std::ofstream file("person.json");\n cereal::JSONOutputArchive archive(file);\n archive(CEREAL_NVP(p1)); // CEREAL_NVP — para campos nomeados\n }\n\n // Leitura de arquivo\n Person p2;\n {\n std::ifstream file("person.json");\n cereal::JSONInputArchive archive(file);\n archive(p2);\n }\n\n std::cout << "Name: " << p2.name << ", Age: " << p2.age << std::endl;\n return 0;\n}\n\n\nCompile: g++ -std=c++11 main.cpp -o main. Após a execução, o arquivo person.json será criado com o conteúdo {"p1": {"name": "Alice", "age": 30}}.
Principais métodos e funções
\n\nAbaixo estão os elementos-chave da biblioteca. Todos os exemplos pressupõem a inclusão de #include <cereal/cereal.hpp> e dos arquivos de archive correspondentes.
1. cereal::JSONOutputArchive
\nO que faz: Cria um archive para escrever dados em