Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用具有嵌入类的boost序列化类,但仅序列化包装器中的信息_C++_Boost_Boost Serialization - Fatal编程技术网

C++ 使用具有嵌入类的boost序列化类,但仅序列化包装器中的信息

C++ 使用具有嵌入类的boost序列化类,但仅序列化包装器中的信息,c++,boost,boost-serialization,C++,Boost,Boost Serialization,我正在使用Boost1.47.0序列化一些用于网络传输的类。我对这个库不是很熟悉,但我已经阅读了很多文档,现在在2到3天没有让它工作之后,我需要一些帮助 我有一节课 class NetworkMessage { public: NetworkMessage(){}; void addPlayer(Player* player); std::string serializeToString(); Player getPlaye

我正在使用Boost1.47.0序列化一些用于网络传输的类。我对这个库不是很熟悉,但我已经阅读了很多文档,现在在2到3天没有让它工作之后,我需要一些帮助

我有一节课

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;
        }
};
编辑:添加了摄影机类

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;
        }
};
class摄像机
{
公众:
摄影机(){};
摄像机(vec3 r、vec3 u、vec3 d);
摄像机和操作员=(摄像机右侧);
void rotateCamera(int xDelta,int yDelta,int xMid,int yMid);
无效设置键(无符号字符键,布尔状态);
void updateCamera();
作废打印();
无效打印向量(vec3-vectr);
mat4 getViewMatrix();
vec3-getEye();
私人:
mat4视图;
vec3r;
vec3u;
vec3d;
vec3方向;
布尔键状态[256];
好友类boost::serialization::access;
模板
无效序列化(存档和ar,常量未签名整数版本)
{
ar&r;
ar&u;
研发;
ar与方向;
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;
        }
    }
}
namespace boost
{
命名空间序列化
{
模板
无效序列化(归档和ar,glm::详细信息::tmat4x4转换,常量无符号整数版本)
{
ar&变换[0];
ar&变换[1];
ar&变换[2];
ar&变换[3];
}
模板
无效序列化(存档和ar,glm::详细信息::tvec3 vec,常量未签名整数版本)
{
ar&vec.x;
ar&vec.y;
ar&vec.z;
}
模板
无效序列化(归档和ar,glm::详细信息::tvec4 vec,常量未签名整数版本)
{
ar&vec.x;
ar&vec.y;
ar&vec.z;
ar&vec.w;
}
模板
无效序列化(归档和ar,glm::详细信息::tvec2 vec,常量未签名整数版本)
{
ar&vec.x;
ar&vec.y;
}
}
}

好吧,我找到了问题所在,我现在正在自责

在我的glm相关商品的序列化中,我需要将它们作为参考传递。我没有这么做。所以基本上我有:

template<class Archive>
void serialize(Archive & ar, glm::detail::tvec3<glm::mediump_float> vec, const unsigned int version)
{
    ar & boost::serialization::make_nvp("x", vec.x);
    ar & boost::serialization::make_nvp("y", vec.y);
    ar & boost::serialization::make_nvp("z", vec.z);
}
模板
无效序列化(存档和ar,glm::详细信息::tvec3 vec,常量未签名整数版本)
{
ar&boost::序列化::生成nvp(“x”,vec.x);
ar&boost::序列化::生成nvp(“y”,vec.y);
ar&boost::序列化::生成nvp(“z”,vec.z);
}
但它应该是:

template<class Archive>
void serialize(Archive & ar, glm::detail::tvec3<glm::mediump_float>& vec, const unsigned int version)
{
    ar & boost::serialization::make_nvp("x", vec.x);
    ar & boost::serialization::make_nvp("y", vec.y);
    ar & boost::serialization::make_nvp("z", vec.z);
}
模板
无效序列化(存档和ar、glm::详细信息::tvec3和vec、常量未签名整数版本)
{
ar&boost::序列化::生成nvp(“x”,vec.x);
ar&boost::序列化::生成nvp(“y”,vec.y);
ar&boost::序列化::生成nvp(“z”,vec.z);
}

谢谢所有试图帮助我的人:)

现在我也在踢自己,因为我一直在踢自己+1.
template<class Archive>
void serialize(Archive & ar, glm::detail::tvec3<glm::mediump_float>& vec, const unsigned int version)
{
    ar & boost::serialization::make_nvp("x", vec.x);
    ar & boost::serialization::make_nvp("y", vec.y);
    ar & boost::serialization::make_nvp("z", vec.z);
}