1

すべて、ブーストを使用してQtプラグインインフラストラクチャをシリアル化しようとしています。私のプラグインインフラストラクチャの簡単な説明-すべてのプラグインはファクトリです。それらをObjectFactoriesと呼びましょう。各プラグイン.so/.dllは、2つのクラスから構成されています

私の問題は、プラグインから(コンソールテストプログラムで)オブジェクトをシリアル化すると、次の例外が発生することです。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

派生オブジェクト.cppの下部:

 BOOST_CLASS_EXPORT_IMPLEMENT(Mynamespace::DerivedObject)

しかし、私はまだ得ています

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

誰かが何かアドバイスを提供できればそれはありがたいです。必要なソースをさらに追加できれば幸いです。 重要な注意点として、2つのクラス(ObjectFactoryDerivedObject)は同じ*内に存在するため、それが重要かどうかはわかりません。

4

1 に答える 1

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>

私はそれらの2つを一致させなければなりませんでした。

于 2013-01-15T21:25:40.247 に答える