[英]Serialize/deserialize SFML Vectors class using cereal
我正在使用SFML和谷類來序列化/反序列化數據,我想為sf::vector2
和sf::vector3
類做到這sf::vector3
:
Data.h
#include <SFML\System.hpp>
#include <fstream>
#include <iostream>
#include "cereal-1.2.2\include\cereal\archives\xml.hpp"
#include "cereal-1.2.2\include\cereal\types\map.hpp"
struct DataInfo {
map<string, sf::Vector2f> vector2FloatData;
map<string, sf::Vector3f> vector3FloatData;
map<string, sf::Vector2i> vector2IntData;
map<string, sf::Vector3i> vector3IntData;
template <class Archive>
void serialize(Archive & ar)
{
ar(vector2FloatData, vector3FloatData, vector2IntData, vector3IntData);
}
};
main.cpp中
int Main()
{
std::ofstream file("Test.xml");
cereal::XMLOutputArchive archive(file);
DataInfo data;
archive(data);
return 0;
}
但谷物不知道什么是sf::vectors
,我得到以下錯誤:
Error C2338 cereal could not find any output serialization functions for the provided type and archive combination.
我知道存在CEREAL_REGISTER_TYPE()
但我不知道如何使其工作。
添加到Data.h :
#include "cereal-1.2.2\include\cereal\types\polymorphic.hpp"
CEREAL_REGISTER_TYPE(sf::Vector2f)
CEREAL_REGISTER_TYPE(sf::Vector3f)
CEREAL_REGISTER_TYPE(sf::Vector2i)
CEREAL_REGISTER_TYPE(sf::Vector3i)
我收到此錯誤:
Error C2338 Attempting to register non polymorphic type.
任何想法?
謝謝。
我無法驗證它是否有效,我想您需要手動添加sfml類型的序列化,例如:
namespace /*cereal*/ sf
{
template<class Archive>
void serialize(Archive & archive, sf::Vector2i & v)
{
archive( v.x, v.y);
}
}
不確定,但它也可以使用模板化類型:
namespace /*cereal*/ sf
{
template<class Archive, class Type>
void serialize(Archive & archive, sf::Vector2<Type> & v)
{
archive( v.x, v.y);
}
}
它們不是多態類型,因此您無需注冊任何內容。
- 編輯 -
在sf命名空間下添加該功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.