问题标签 [boost-serialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
boost - 提升序列化多态寄存器(导出)不能跨文件工作
我boost::serialization
在我的项目中使用。这个项目很大,并且在几个地方序列化了我的对象。根据此处的文档,我应该分两步导出我的课程。
BOOST_EXPORT_KEY()
在.h
文件中,女巫包含声明。BOOST_EXPOET_IMPLEMENT()
在.cpp
文件中,witch 包含导出的实例化(定义)。
hier.h
类层次结构,层次结构中有3个类。
并且 ahier.cpp
包含实现:
并main.cpp
使用序列化:
它编译没有任何问题,但运行它会导致:
这意味着派生类没有注册,意味着注册hier.cpp
不起作用。但这真的很奇怪,因为:
如果我注册实现是两者
main.cpp
,hier.cpp
它会在链接时发出重复的定义。意味着注册hier.cpp
是可以的,并且暴露在链接器的可见性中。,否则不会出现重复定义错误。如果我只在 中注册实现
main.cpp
,它运行正常。
在那种情况下,我真的很困惑。任何意见和建议表示赞赏。提前致谢。
c++ - boost::serialization - 是否有一种可移植的方法来二进制序列化 std::wstrings?
我想用 boost::serialization 在同一台 Windows 机器上序列化 32 位进程和 64 位进程之间的一些数据结构。
这个答案建议使用 eos::portable_iarchive,但是当我尝试这样做时,我遇到了 STATIC_ASSERT 失败:
是否有另一种支持 std::wstrings 的方法(除了 text_iarchive 我不想用于性能考虑)?
c++ - boost 序列化:查看流是否“好”
我目前开发了一个服务器应用程序,它必须从客户端接收序列化数据,反序列化并最终处理它。序列化的数据以字符数组的形式发送。我的问题是我的应用程序很容易通过向它发送无效数据而被破坏。所以我想问是否可以在尝试从中获取数据之前检查字符串(-stream)并查看它是否有利于(反)序列化(例如它是否具有有效的签名)。
顺便说一句:正如标题已经说过的,我的应用程序使用了 boost.serialization。
提前谢谢了 :)
boost - 如何使用 boost 序列化 MFC 集合
到目前为止,我正在尝试在我的基于 MFC 的项目中使用 Boost 序列化,但我遇到了错误,例如serialize is not a member of CArray或serialize is not a member of CMap。
我不知道如何序列化 MFC 集合。
任何人都可以使用Boost API成功序列化和反序列化MFC集合(CString,CMap)的代码。
提前致谢
c++ - BOOST_CLASS_EXPORT 在 main() 结束时导致分段错误?
我boost::serialization
用于我的课程。由于我有一些继承,我必须使用BOOST_CLASS_EXPORT
“注册”我的类。希望我没有误会什么。
我使用这个宏:
甚至我使用这个:
在一个头文件中,例如 MyClass.h,其中还包含 MyClass 的定义。但是,即使我尝试将宏放在我的一个源 (*.cpp) 文件中,它也会再次失败。
我在main()
. Stacktrace 显示调用堆栈与此问题几乎相同。我找不到此问题的解决方案或解决方法。我认为问题是由于析构函数,但我不知道如何解决它。我什至不能说这是我的错或提升中的错误。(希望我自己能修好是我的错)
有什么解决方案/解决方法吗?为什么会出现问题?
我的构建环境是:Ubuntu 10.04 64位服务器(内核2.6.32),gcc 4.4.3,boost 1.40。(我找到它/usr/include/boost/version.hpp
并使用它apt-cache show libboost-dev
来查看版本)
我-Wall -g3 -O0
用作编译器选项。
奇怪的是,这个问题只出现在我的一台机器上。另一台运行 CentOS(内核 2.6.18)、gcc 4.1.2 和 boost 1.41 的机器运行良好。
更新:我将整个项目简化为一个小例子。它放在底部,也可以在我的 gist上找到。课程什么都不做,(我的)程序什么也不做。然而,BOOST_CLASS_EXPORT
导致分段错误。
请注意,如果我删除f1.cpp
or f2.cpp
,问题就会消失(需要多个编译单元)。类似的情况发生在class A/A_child
和上B/B_child
。我不知道为什么只有一个班级不会出现问题。
代码
编译
f1.cpp
f2.cpp(与 f1.cpp 相同)
主文件
我的类.h
c++ - Boost.Asio 与谷歌协议缓冲区
我目前正在研究改进我们当前的 c++ 网络手工序列化机制的方法,以维护我们现有的二进制协议。采用的第一种方法是使用 Boost.Asio 和 Boost.Serialisation 使用二进制序列化对其进行编码。无论如何,事实证明它比我们当前的手工实现要慢一些(10%)。任何人都有关于使用 google protobuf 和 Boost.Asio 的实际_real_work_经验?
我在谷歌上搜索了样本,但只能想出这个例子:
有人在任何实际项目中这样做过吗?我对性能数据非常感兴趣,因为这必须非常快......
c++ - 强大的 boost::variant 序列化
我在我的应用程序中使用boost::variant
和boost::serialize
。序列化模块内置了对序列化变体的支持,因此:
作品。但是,我的问题是序列化不健壮。根据我的应用程序的编译方式,变体的元素可能会发生变化。目前,序列化模块似乎只是嵌入了“活动”变体类型的索引;如果变体更改为,例如,这是一个问题boost::variant<double,string>
。
任何人都可以提出改进方法,以便序列化/反序列化工作,以便已序列化的类型是boost::variant
. (因此,在上述情况下boost::variant<int,double> u(3.14)
,可以取消序列化为boost::variant<double,std::string>
. 我知道这可能需要我提供其他信息,例如类型的字符串化形式。
c++ - boost::serialization 如何与 C++11 中的 std::shared_ptr 一起使用?
我知道有一个用于序列化的Boost 模块,但我找不到任何.boost::shared_ptr
std::shared_ptr
另外,我不知道如何轻松实现它。恐怕下面的代码
不起作用。事实上,如果某个对象被多次引用,它将在第一次运行时加载ar>>r
,然后只复制一个指针。然而,我们会创建多个shared_ptr
指向它的对象,因此会不止一次地破坏它。
有什么想法吗?
关于我正在使用的系统的一些技术细节:
- 操作系统:Ubuntu 11.10 (x64)
- 编译器:g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
- 升压版本:1.46.1(安装
sudo apt-get install libboost-dev
)
c++ - 使用 QT 网络进行序列化和使用 Boost 进行反序列化
我第一次要感谢HostileFork帮助我解释我的问题。谢谢 !
我正在尝试构建一个通过二进制协议发送数据的客户端和服务器。
我的问题是我想将一个类从 QT 客户端发送到 Boost 服务器。我的标题(一个整数,是我班级的大小)写在套接字上。当我想读取服务器端的标头时,我无法获得好的整数(而不是我有一个大数字,例如 -13050660)。我认为问题出在服务器上的反序列化上,但我不确定。
这是我的 Qt 客户端代码用来将数字 10 写入套接字的技术:
然后我尝试在使用 boost 的 async_read() 的服务器进程上读取它:
这是对字符串结果进行操作的函数:
我确实得到了 32 位有符号整数(4 个字节),但它不是 10,而是类似于 -1163005939。任何人都知道为什么这不起作用?
服务器和客户端都在 Windows7 pro 64 位上启动。
c++ - 使用 boost 序列化抽象类时出错
我正在尝试序列化我的数据结构,以便将它们写入 tcp 套接字。
到目前为止,我发现我的问题是序列化。我什至尝试使用
但我找不到任何类似于我的程序的工作示例以及如何正确实现它。
以下是我访问过的一些链接:
- http://programmers-blog.com/category/cc
- http://www.boost.org/doc/libs/1_48_0/libs/serialization/doc/tutorial.html#simplecase
- http://en.highscore.de/cpp/boost/serialization.html#serialization_class_hierarchies
我的数据结构比这个复杂一点,但我们假设我有以下结构
坐标.h
移动.h
移动正常.h
虚拟方法在这里定义。
移动正常.cpp
我的 main.cpp 看起来像这样:
但是当我运行程序时,出现以下错误:
Test.exe 中 0x76dbb9bc 处未处理的异常:Microsoft C++ 异常:内存位置 0x001df078 处的 boost::archive::archive_exception..
我正在使用 VS2010 和 Boost 1.48.0。