すべて、ブーストを使用して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つのクラス(ObjectFactory
とDerivedObject
)は同じ*内に存在するため、それが重要かどうかはわかりません。