Я использую SFML и хлопья для сериализации / десериализации данных, и я хочу сделать это для классов sf::vector2
и 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.
Любая идея?
Спасибо.