gpt4 book ai didi

c++ - 如何将序列化方法添加到作为 Windows 数据结构的类成员,以便在 C++ 中与 boost 序列化一起使用

转载 作者:行者123 更新时间:2023-11-30 01:55:07 26 4
gpt4 key购买 nike

我在网上搜索过,似乎找不到关于这个问题的明确答案。基本上,我有一个类,其中一些成员是 Windows 定义的数据结构。例如,SYSTEMTIME 是其中一个成员的类型。根据 boost 文档,我已将序列化方法等添加到类定义中。它在没有更复杂的 Windows 数据类型(例如 BOOL、基元等工作正常)的情况下编译得很好。如果我添加它们,我会收到一条错误消息,例如“...序列化不是 SYSTEMTIME 的成员...”。我尝试了传递 SYSTEMTIME 参数的“不显眼”序列化方法。我什至尝试使用添加的序列化方法重新定义整个结构。在那种情况下,我收到了重新定义错误。

我知道类或结构类型的成员需要他们自己的序列化方法以及调用包含类的序列化方法时如何调用它,但似乎无法弄清楚如何为我所做的类型执行此操作不定义。我是 boost 的新手,我在这里有点迷路,对这个问题的任何帮助将不胜感激。

提前致谢。

编辑 1:

我想我指的是非侵入性,因为我不知道这两者之间存在差异。我首先尝试添加:

    namespace boost {
namespace serialization {
template<typename Archive>
void serialize( Archive& ar, SYSTEMTIME& st, const unsigned int version ) {
ar & st.wYear;
ar & st.wMonth;
ar & st.wDayOfWeek;
ar & st.wDay;
ar & st.wHour;
ar & st.wMinute;
ar & st.wSecond;
ar & st.wMilliseconds;
}
}
}

并收到错误序列化不是_SYSTEMTIME 的成员。我刚刚又试了一次,它编译了,嗯,我会测试它是否有效并再次发布。

最佳答案

我不能说你做错了什么,但这里有证据证明它是有效的。

查看 Live on Coliru

输出

clang++ -std=c++11 -Os -Wall -pedantic main.cpp -lboost_system -lboost_serialization && ./a.out
22 serialization::archive 10 0 0 1 2 3 4 5 6 7 8

代码:

#include <boost/archive/text_oarchive.hpp>

typedef uint32_t WORD;

typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;

namespace boost { namespace serialization {
template<typename Archive>
void serialize(Archive& ar, SYSTEMTIME& st, const unsigned int version) {
ar & st.wYear;
ar & st.wMonth;
ar & st.wDayOfWeek;
ar & st.wDay;
ar & st.wHour;
ar & st.wMinute;
ar & st.wSecond;
ar & st.wMilliseconds;
}
} }

int main()
{
boost::archive::text_oarchive oa(std::cout);
SYSTEMTIME d { 1,2,3,4,5,6,7,8 };
oa << d;
}

关于c++ - 如何将序列化方法添加到作为 Windows 数据结构的类成员,以便在 C++ 中与 boost 序列化一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com