編集:質問のタイトルは、私が得たコンパイラ エラーの深い誤解に基づいていました。私は(ばかげて)エラーが、関数内で宣言したオブジェクトに逆シリアル化しようとしたと仮定していました。これは完全に間違っていました。自分で十分なデバッグ作業を行っていないか、何が問題なのかを突き止めることができたはずです。そのため、タイトルがかなり誤解を招くものだったので、変更しました。助けてくれた Андрей Беньковский に感謝します。
私は、シリアルを使用してエンジンで 3D モデルのシリアル化関数を作成しています。これは、非常に効率的で使いやすいことが証明されています。これまでのところ、単純なメッシュのシリアル化 (逆) をテストしたところ、すべてうまくいきました。しかし、今、別のクラスを逆シリアル化しようとしていますが、問題が発生しました。
void loadFile(std::string filepath)
{
DescriptionFile file;
{
ifstream stream = ifstream(filepath, std::ifstream::binary);
PortableBinaryInputArchive archive(stream);
archive(file);
stream.close();
}
}
これは私のクラスで、逆シリアル化する必要があります:
struct DescriptionFile
{
public:
DescriptionFile(){}
map<string, MeshDescription*> meshDescriptions;
map<string, ModelDescription*> modelDescriptions;
public:
template<class Archive>
void serialize(Archive & archive)
{
archive(meshDescriptions, modelDescriptions);
}
};
それは私にコンパイラエラーを与えます:Cerealは生のポインターのシリアル化をサポートしていません-それはポインターではありませんが、スマートポインターを使用してください。コードの別の部分では、同様のことがうまく機能します。誰かがこれを解決するのを手伝ってくれたらうれしいです。