使用Qt插件进行Boost序列化

时间:2013-01-15 19:51:04

标签: 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();
}

derivedobject.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)存在于同一个*中。所以我不知道这是否重要。

1 个答案:

答案 0 :(得分:1)

好的,明白了......

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

#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>

我必须让这两场比赛。