1
我正在使用Boost 1.47.0序列化網絡傳輸的某些類。我對圖書館不是很熟悉,但是我已經閱讀了相當多的文檔,現在在2到3天后還沒有開始工作,我需要一些幫助。使用具有嵌入類的boost序列化類,但僅包裝器中的信息被序列化
我有一個類
class NetworkMessage
{
public:
NetworkMessage(){};
void addPlayer(Player* player);
std::string serializeToString();
Player getPlayer();
virtual ~NetworkMessage();
protected:
private:
Player players;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & players;
}
};
在這一點上我這僅限於在消息發送一個玩家的信息和工作正常,但我的球員包含它的另一個類,這是相機。我的播放器類中的所有原生C++成員序列化正確。但是,當我反序列化它時,我的玩家相機的所有信息都會丟失。但其他信息保存並運行。我調試了我的網絡傳輸,並且收到的消息中包含所有序列化的信息。
我不確定我是否誤解了圖書館的工作方式,但是伸出援手是非常有用的,即使只是一些建議,以指導我可能錯誤的正確方向。
此外,只是作爲一個附註,我使用的標準serialize
方法,提高提供。
class Player
{
public:
Player(){};
Player(float _x, float _y, float _z, std::string _name);
void setCamera(Camera camera);
vec3 getLocation();
std::string getName();
Camera getCamera();
virtual ~Player();
protected:
private:
float x;
float y;
float z;
std::string name;
Camera playerCam;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & x;
ar & y;
ar & z;
ar & name;
ar & playerCam;
}
};
編輯:增加了相機類。
class Camera
{
public:
Camera(){};
Camera(vec3 r, vec3 u, vec3 d);
Camera& operator=(Camera rhs);
void rotateCamera(int xDelta, int yDelta, int xMid, int yMid);
void setKey(unsigned char key, bool state);
void updateCamera();
void print();
void printVec(vec3 vectr);
mat4 getViewMatrix();
vec3 getEye();
private:
mat4 view;
vec3 r;
vec3 u;
vec3 d;
vec3 direction;
bool keyStates[256];
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar &r;
ar &u;
ar &d;
ar &direction;
ar &keyStates;
ar &view;
}
};
我還添加了序列化GLM向量和矩陣的代碼。
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, glm::detail::tmat4x4<float> transform, const unsigned int version)
{
ar & transform[0];
ar & transform[1];
ar & transform[2];
ar & transform[3];
}
template<class Archive>
void serialize(Archive & ar, glm::detail::tvec3<float> vec, const unsigned int version)
{
ar & vec.x;
ar & vec.y;
ar & vec.z;
}
template<class Archive>
void serialize(Archive & ar, glm::detail::tvec4<float> vec, const unsigned int version)
{
ar & vec.x;
ar & vec.y;
ar & vec.z;
ar & vec.w;
}
template<class Archive>
void serialize(Archive & ar, glm::detail::tvec2<float> vec, const unsigned int version)
{
ar & vec.x;
ar & vec.y;
}
}
}
...福氣! – alfC 2014-09-23 15:40:38
現在我也踢了自己,因爲我已經[看過這個特殊的陷阱](http://stackoverflow.com/a/23177984/85371)在SO上。 +1 – sehe 2014-09-23 15:47:43