将序列化添加到 SFML 颜色

Add Serialize to SFML Color

我正在处理 SFML 对象和 运行 颜色数据的序列化问题,因为它们不是默认类型,因此默认情况下不支持它们。我尝试制作环绕 class,但失败了,但我找到了将类型添加到谷物本身的信息。根据我在 Serialize/deserialize SFML Vectors class using cereal 上阅读的内容,下面的代码应该可以工作,我目前在 .h 文件中有它。

#include <SFML/Graphics.hpp>
#include <SFML/Config.hpp>



namespace /*cereal*/ sf
{

    template<class Archive>
    void serialize(Archive& archive, sf::Color& c)
    {
        
        archive(
            CEREAL_NVP(this->r),
            CEREAL_NVP(this->g),
            CEREAL_NVP(this->b),
            CEREAL_NVP(this->a)
        );
    }
}

然而,我还是报错了,如下:

Error   C2338   cereal could not find any output serialization functions for the provided type and archive combination. SFML_Tiles  C:\Userscwe\Documents\Visual Studio Libraries\Cereal\cereal-1.3.2\include\cereal\cereal.hpp  570 

我无法解析文档以进一步理解它,上面链接的堆栈溢出 post 也没有提供任何见解。我可能需要将它包含在某个地方,但由于我不知道在哪里,或者即使这是正确的格式,我在这里问

任何帮助将不胜感激。谢谢

Reddit 上的 dergvern47 帮助我解决了这个问题。问题是 2 倍。访问内部的值不能用这个来完成,但是用函数内部的对象,并且这个里面的.h文件需要在项目中存在的最高.h文件中#include。原文post可以在这里找到https://www.reddit.com/r/cpp_questions/comments/ul7c3v/c_cereal_add_serialization_to_class_in_imported/i7tswiv/?context=3

以及他们编写的代码:

#include <SFML/Graphics.hpp>
#include <cereal/archives/json.hpp>

namespace sf {

    template<class Archive>
    void serialize(Archive& archive, sf::Color& c)
    {
        archive(
            CEREAL_NVP(c.r),
            CEREAL_NVP(c.g),
            CEREAL_NVP(c.b),
            CEREAL_NVP(c.a)
        );
    }
}

int main()
{
    {
        cereal::JSONOutputArchive archive(std::cout);

        archive(sf::Color::Magenta);
    }

    return 0;
}