将序列化添加到 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;
}
我正在处理 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;
}