91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++序列化庫與動態庫集成

發布時間:2024-09-19 14:37:05 來源:億速云 閱讀:86 作者:小樊 欄目:編程語言

在C++中,序列化庫和動態庫可以很好地集成在一起,以便在運行時動態加載和使用這些庫

  1. 首先,確保你已經安裝了Boost庫。如果沒有,請訪問Boost官網下載并安裝。

  2. 創建一個名為serialization_dynamic_lib的文件夾,然后在該文件夾中創建兩個子文件夾:includesrc

  3. include文件夾中創建一個名為my_class.h的頭文件,內容如下:

#ifndef MY_CLASS_H
#define MY_CLASS_H

#include <boost/serialization/access.hpp>
#include <boost/serialization/nvp.hpp>

class MyClass {
public:
    MyClass() = default;
    MyClass(int x, int y) : x_(x), y_(y) {}

    int getX() const { return x_; }
    int getY() const { return y_; }

private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version) {
        ar & BOOST_SERIALIZATION_NVP(x_);
        ar & BOOST_SERIALIZATION_NVP(y_);
    }

    int x_;
    int y_;
};

#endif // MY_CLASS_H
  1. src文件夾中創建一個名為my_class.cpp的源文件,內容如下:
#include "../include/my_class.h"
  1. src文件夾中創建一個名為CMakeLists.txt的文件,內容如下:
cmake_minimum_required(VERSION 3.0)
project(MyClassLibrary)

set(CMAKE_CXX_STANDARD 11)

find_package(Boost REQUIRED serialization)

add_library(my_class SHARED my_class.cpp)
target_include_directories(my_class PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include)
target_link_libraries(my_class PRIVATE Boost::serialization)
  1. serialization_dynamic_lib文件夾中創建一個名為build的文件夾,然后進入該文件夾并運行以下命令:
cmake ..
cmake --build .

這將生成一個名為my_class的動態庫(在Windows上為my_class.dll,在Linux上為libmy_class.so)。

  1. 現在,你可以在其他項目中使用這個動態庫。創建一個新的項目文件夾,例如main_project,并在其中創建一個名為main.cpp的文件,內容如下:
#include <iostream>
#include <fstream>
#include <boost/dll/import.hpp>
#include <boost/serialization/export.hpp>
#include "my_class.h"

int main() {
    // Load the dynamic library
    boost::dll::shared_library lib("path/to/my_class");

    // Create an instance of MyClass
    auto create_my_class = boost::dll::import_alias<MyClass(*)()>(lib, "create_my_class");
    MyClass *my_class = create_my_class();

    // Serialize and deserialize the object
    std::ofstream ofs("my_class.bin", std::ios::binary);
    boost::archive::binary_oarchive oa(ofs);
    oa << BOOST_SERIALIZATION_NVP(my_class);
    ofs.close();

    MyClass *my_class_copy = nullptr;
    std::ifstream ifs("my_class.bin", std::ios::binary);
    boost::archive::binary_iarchive ia(ifs);
    ia >> BOOST_SERIALIZATION_NVP(my_class_copy);
    ifs.close();

    // Print the deserialized object's values
    std::cout << "Deserialized object: (" << my_class_copy->getX() << ", " << my_class_copy->getY() << ")" << std::endl;

    delete my_class;
    delete my_class_copy;

    return 0;
}
  1. main_project文件夾中創建一個名為CMakeLists.txt的文件,內容如下:
cmake_minimum_required(VERSION 3.0)
project(MainProject)

set(CMAKE_CXX_STANDARD 11)

find_package(Boost REQUIRED serialization filesystem system)

add_executable(main main.cpp)
target_include_directories(main PRIVATE path/to/serialization_dynamic_lib/include)
target_link_libraries(main PRIVATE Boost::serialization Boost::filesystem Boost::system)
  1. main_project文件夾中創建一個名為build的文件夾,然后進入該文件夾并運行以下命令:
cmake ..
cmake --build .
  1. 運行生成的可執行文件,你應該會看到類似以下的輸出:
Deserialized object: (0, 0)

這表明動態庫已成功加載,并且可以正確地序列化和反序列化對象。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

阿坝| 东源县| 修武县| 平原县| 法库县| 策勒县| 尉犁县| 镇江市| 庆城县| 宁城县| 吉首市| 文山县| 科技| 丹阳市| 颍上县| 平舆县| 湄潭县| 石泉县| 宣武区| 容城县| 承德县| 张家川| 辉南县| 上蔡县| 新民市| 陇川县| 甘德县| 什邡市| 海城市| 昂仁县| 固镇县| 巴里| 纳雍县| 炎陵县| 尚义县| 平舆县| 商洛市| 舞阳县| 改则县| 出国| 上栗县|