[英]Cereal Add Serialize to Existing Library Class
我正在嘗試在 SFML 庫中添加對現有 class 的串行支持。 我正在嘗試保存 colors 以便稍后加載。 從文件中可以看出,谷物很容易擴展到其他類型,但我不知道該怎么做。 除非創建一個 SerialColor class 並在其中重新實現 sf::Color 並在其中添加一個序列化成員,有沒有辦法做到這一點? 我真的不想從 SFML 重寫我需要的 5 個可序列化的類。
我正在將 Color 轉換為 SerialColor,到目前為止已經實現了以下目標:
序列顏色.hpp
#pragma once
#include <SFML/Graphics.hpp>
#include <SFML/Config.hpp>
class SerialColor: sf::Color
{
public:
static const SerialColor Black; ///< Black predefined color
static const SerialColor White; ///< White predefined color
static const SerialColor Red; ///< Red predefined color
static const SerialColor Green; ///< Green predefined color
static const SerialColor Blue; ///< Blue predefined color
static const SerialColor Yellow; ///< Yellow predefined color
static const SerialColor Magenta; ///< Magenta predefined color
static const SerialColor Cyan; ///< Cyan predefined color
static const SerialColor Transparent; ///< Transparent (black) predefined color
SerialColor(sf::Uint8 red, sf::Uint8 green, sf::Uint8 blue, sf::Uint8 alpha = 255);
private:
SerialColor(sf::Color c);
sf::Color color;
template<class Archive>
void serialize(Archive& archive, std::uint32_t const version) {
archive(CEREAL_NVP(this->color.r),
CEREAL_NVP(this->color.g),
CEREAL_NVP(this->color.b)
);
}
};
序列顏色.cpp
#include "SerialColor.h"
SerialColor::SerialColor(sf::Uint8 red, sf::Uint8 green, sf::Uint8 blue, sf::Uint8 alpha = 255) {
this->color = sf::Color(red, green, blue, alpha);
}
SerialColor::SerialColor(sf::Color c) {
this->color = sf::Color(c);
}
這目前還沒有完全實現,所以它不起作用。 然而,將 1 function 添加到 class 感覺有點矯枉過正。 如果擴展是正確的方法,您能否提供被認為是添加此功能的正常方法? 這只是感覺不對。
您可以為谷物提供 function 告訴它如何序列化您的自定義數據類型,而不是嘗試直接擴展 class,例如:
namespace cereal {
template<class Archive>
void serialize(Archive& archive, sf::Color c) {
archive(CEREAL_NVP(c.r),
CEREAL_NVP(c.g),
CEREAL_NVP(c.b)
);
}
您可以選擇將類似上述代碼的內容添加到您自己的 header 文件(類似“Serialize.hpp”)並包含它而不是谷物.hpp,或者您可以直接擴展您的谷物標題(即類似cereal/types/sf_color.hpp
)。
這真的取決於你把這段代碼放在哪里,但只要它是可見的,谷物將自動能夠序列化 sf::Color 類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.