我試圖從JSON文件加載參數到我自己的參數類中使用VS2013穀物(v1.12)。C++ /穀物:異常,但從JSON反序列化到自己的類
編譯並加載到POD中可以正常工作,但加載到我自己的類中會拋出cereal::RapidJSONException
。
這裏是我的代碼:
#include <iostream>
#include "cereal/archives/json.hpp"
struct CMyStruct {
CMyStruct(int f_value) : m_value(f_value) {}
int m_value;
};
template<class Archive> void load(Archive& ar, CMyStruct& parameter) {
int input;
ar(input);
parameter.m_value = input;
};
void test_cereal() {
int l_scalar_i(42);
CMyStruct l_scalar(42);
std::ifstream l_jsonFile("example_minimal.json");
cereal::JSONInputArchive l_ar(l_jsonFile);
l_ar(cereal::make_nvp("scalar", l_scalar_i)); // WORKS
l_ar(cereal::make_nvp("scalar", l_scalar)); // throws cereal::RapidJSONException
return;
}
的JSON文件:
{
"bool": false,
"scalar": 3
}
繼調用堆棧顯示document.h:244內部RapidJSON拋出該異常:
ConstMemberIterator MemberEnd() const
{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; }
但是,我不知道該怎麼做。我怎樣才能讓我的代碼工作?
非常感謝!
隨溶液UPDATE:
作爲寫入通過ChrisBFX,有必要實現以反序列化C++對象到一個標量JSON load_minimal/save_minimal。
加載/保存另一方面將C++對象序列化爲JSON對象。
對於我的代碼中,load()函數已被刪除,取而代之的是這樣的:
template<class Archive>
int save_minimal(const Archive& ar,
const CMyStruct& parameter)
{
return parameter.m_value;
};
template<class Archive>
void load_minimal(const Archive& ar,
CMyStruct& parameter,
const int & value_i)
{
parameter.m_value = value_i;
};
現在,它就像一個魅力! :-)
謝謝,那正是問題!在實現load_minimal/save_minimal之後,代碼做了我想要的:-) – sidn