温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

实战C++序列化库快速上手

发布时间:2024-09-19 11:04:46 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

C++ 序列化库有很多,比如 Boost.Serialization、cereal 等

  1. 首先,确保你已经安装了 CMake 和 Conan。如果没有,请参考官方文档进行安装:https://cmake.org/install/ 和 https://docs.conan.io/en/latest/installation.html

  2. 创建一个新的文件夹,用于存放项目文件。例如,我们可以创建一个名为 cereal_example 的文件夹。

  3. cereal_example 文件夹中,创建一个名为 CMakeLists.txt 的文件,内容如下:

cmake_minimum_required(VERSION 3.1)
project(cereal_example)

set(CMAKE_CXX_STANDARD 11)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_executable(cereal_example main.cpp)
target_link_libraries(cereal_example ${CONAN_LIBS})
  1. 在同一个文件夹中,创建一个名为 conanfile.txt 的文件,内容如下:
[requires]
cereal/1.3.0

[generators]
cmake
  1. 运行以下命令,以生成项目文件:
mkdir build
cd build
conan install ..
cmake ..
  1. cereal_example 文件夹中,创建一个名为 main.cpp 的文件,内容如下:
#include <iostream>
#include <fstream>
#include <cereal/archives/binary.hpp>
#include <cereal/types/vector.hpp>

struct MyData {
    int32_t id;
    std::string name;

    template<class Archive>
    void serialize(Archive &archive) {
        archive(id, name);
    }
};

int main() {
    // 序列化
    {
        std::ofstream os("data.bin", std::ios::binary);
        cereal::BinaryOutputArchive archive(os);

        MyData data1 = {1, "Alice"};
        MyData data2 = {2, "Bob"};
        std::vector<MyData> data_list = {data1, data2};

        archive(data_list);
    }

    // 反序列化
    {
        std::ifstream is("data.bin", std::ios::binary);
        cereal::BinaryInputArchive archive(is);

        std::vector<MyData> data_list;
        archive(data_list);

        for (const auto &data : data_list) {
            std::cout << "ID: " << data.id << ", Name: " << data.name << std::endl;
        }
    }

    return 0;
}
  1. 编译并运行项目:
cmake --build .
./cereal_example
  1. 你应该会看到以下输出:
ID: 1, Name: Alice
ID: 2, Name: Bob

现在你已经成功地使用 cereal 库进行了序列化和反序列化操作。你可以根据需要修改 main.cpp 中的代码,以适应你的项目需求。更多关于 cereal 的信息和示例,请参考官方文档:https://uscilab.github.io/cereal/

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI