提升的简单扩展::存档::text_oarchive
Simple extension of boost::archive::text_oarchive
我正在尝试将成员变量添加到 Boost 存档类中。在此之后,我想出了:
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <fstream>
class MyOArchive : public boost::archive::text_oarchive_impl<MyOArchive>
{
public:
bool MyData;
friend class boost::archive::detail::common_oarchive<MyOArchive>;
friend class basic_text_oarchive<MyOArchive>;
//friend class boost::serialization::save_access; // save_access in namespace boost::serialization does not name a type
MyOArchive(std::ostream& os, unsigned int flags = 0) : boost::archive::text_oarchive_impl<MyOArchive>(os, flags) {}
};
class MyClass
{
public:
private:
friend class boost::serialization::access;
double Value;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & Value;
}
};
int main()
{
MyClass myClass;
std::ofstream outputStream("test.txt");
//boost::archive::text_oarchive outputArchive(outputStream);
MyOArchive outputArchive(outputStream);
outputArchive << myClass;
outputStream.close();
return 0;
}
但是,我收到链接器错误:
undefined reference to boost::archive::text_oarchive_impl<MyOArchive>::text_oarchive_impl(std::ostream&, unsigned int)
谁能解释一下这里出了什么问题?我不需要重新实现存档的任何功能,只需附加此成员MyData
即可。
啊。发现了它。
您需要将基本实现的ipp
包含在链接到最终产品的一个 TU 中。
#include <boost/archive/impl/basic_text_oarchive.ipp>
#include <boost/archive/impl/text_oarchive_impl.ipp>
此外,save_access
住在不同的城堡命名空间中:
friend class boost::archive::save_access;
住在科里鲁
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/impl/basic_text_oarchive.ipp>
#include <boost/archive/impl/text_oarchive_impl.ipp>
#include <fstream>
class MyOArchive : public boost::archive::text_oarchive_impl<MyOArchive> {
public:
bool MyData;
friend class boost::archive::detail::common_oarchive<MyOArchive>;
friend class basic_text_oarchive<MyOArchive>;
friend class boost::archive::save_access;
MyOArchive(std::ostream &os, unsigned int flags = 0) : boost::archive::text_oarchive_impl<MyOArchive>(os, flags) {}
};
class MyClass {
private:
friend class boost::serialization::access;
double Value;
template <class Archive> void serialize(Archive &ar, unsigned) { ar &Value; }
};
int main() {
MyClass myClass;
{
std::ofstream outputStream("test.txt");
MyOArchive outputArchive(outputStream);
outputArchive << myClass;
}
}
输出为
22 serialization::archive 13 0 0 6.95328877045326431e-310
相关文章:
- 删除提升存档对象也会删除与其关联的流?
- 提示存档文件中的动态库依赖项
- 使用 sf::Text 数组时崩溃
- 如何在 c++ 中打印存档中的对象向量
- 为什么 sf::Text 显示点而不是数字?
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 为 g++ build 设置超时,为 Sublime Text 运行?
- 在现代 CMake 项目中存档静态依赖项
- 编辑期间的 QTableWidgetItem text() 属性
- 如何将空文件夹和符号链接添加到存档 - libarchive
- 如何找到目标文件 *.o 的 ram rom 使用情况(.bss .text .rodata .data)?
- 在 Linux 上编译 - 在函数 '_start' 中:(.text+0x20):对 'main' 的未定义引用
- 收获(加热) Wix - 在 MSI 中存档资源
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- 增强序列化,按基类型加载存档类会产生错误的数据
- 当我尝试绘制 sf::Text 对象时,SFML 中的分段错误
- 增强二进制存档 - 减小大小
- 在 .text 部分中定义只读数据的原因是什么?
- 连接存档加速序列化