c++ - 将 Boost Serialize 与 Qt 插件一起使用

标签 c++ qt serialization boost

全部,我正在尝试使用 boost 序列化 Qt 插件基础结构。我的插件基础结构的快速描述——所有插件都是工厂,我们称它们为 ObjectFactories。每个插件 .so/.dll 都是由两个类构造的

我的问题是,当我从我的插件(在控制台测试程序中)序列化一个对象时,我得到一个异常derived class not registered or exported

objectfactory.cpp/.h:

class ObjectFactory : public QObject, public [PluginInterface]
{
    //most important method
    BaseObject * createBaseObject();
}

派生对象.h:

#include "base_object.h"

#include <boost/archive/basic_text_iarchive.hpp>
#include <boost/archive/basic_text_oarchive.hpp>

namespace MyNamespace
{

class DerivedObject : public BaseObject
{
public:
    DerivedObject();

    ~DerivedObject();

private:
    BaseObjectData<double> m_data;

    template<class Archive>
    void serialize(Archive &ar, const unsigned int version)
    {
        ar & boost::serialization::base_object<BaseObject>(*this);
        ar & m_data.data(); // T & BaseObjectData::data() - returns reference
    }
};

}

BOOST_CLASS_EXPORT_KEY(MyNamespace::DerivedObject) //Register our class for serialization/deserialization

在derivedobject.cpp的底部:

 BOOST_CLASS_EXPORT_IMPLEMENT(Mynamespace::DerivedObject)

然而,我还是得到了

what(): unregistered class - derived class not registered or exported

如果有人可以提供任何建议,我们将不胜感激。我很乐意添加更多我需要的资源。 重要提示,两个类(ObjectFactoryDerivedObject)存在于同一个 * 中。所以我不知道这是否重要。

最佳答案

好的,知道了...

在我的基础和派生标题中:

#include <boost/archive/basic_text_iarchive.hpp>
#include <boost/archive/basic_text_oarchive.hpp>

在我的测试程序中:

#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

我必须让这两者匹配。

关于c++ - 将 Boost Serialize 与 Qt 插件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345695/

相关文章:

c++ - 在 XCode 3.xx GDB 中打印 Qt 数据结构(QList、QString 等)

c++ - 在 Qt Creator 中将 Lua 与 C++ 链接起来

java - 是否有一个库或好的方法可以使 Java 上的二进制保存游戏变得更容易或更快?

c# - SingleResult.Create 在空 IQueryable 上的 Odata 序列化错误

c++ - 与 register 关键字相关的其他语义

c++ - 平板电脑上的手写笔 "lifts"会怎样?

qt - 使用 GYP 而不是 QMake 构建 MOC 文件?

c# - 异常 : Maximum number of items that can be serialized or deserialized in an object graph is '65536'

c++ - 我的 ifstream 似乎不起作用

c++ - 什么时候应该使用字符串而不是字符串流?