我正在生成代码以使用JSON 精神对 JSON 中的各种 C++ 结构进行编码。
生成的代码当前看起来像这样:
Value _encode(df::tile_page rval){
Object val;
val.push_back(Pair("token", encode(rval.token)));
val.push_back(Pair("filename", encode(rval.filename)));
val.push_back(Pair("tile_dim_x", encode(rval.tile_dim_x)));
val.push_back(Pair("tile_dim_y", encode(rval.tile_dim_y)));
val.push_back(Pair("page_dim_x", encode(rval.page_dim_x)));
val.push_back(Pair("page_dim_y", encode(rval.page_dim_y)));
val.push_back(Pair("texpos", encode_vector<int32_t>(rval.texpos)));
val.push_back(Pair("datapos", encode_vector<int32_t>(rval.datapos)));
val.push_back(Pair("texpos_gs", encode_vector<int32_t>(rval.texpos_gs)));
val.push_back(Pair("datapos_gs", encode_vector<int32_t>(rval.datapos_gs)));
val.push_back(Pair("loaded", encode(rval.loaded)));
return Value(val);
}
但是我认为很难弄清楚人们是在传递结构、指向结构的指针还是引用。我是 C/C++ 新手,所以有些细微之处有点超出我的理解。
我正在考虑为每个结构创建多个版本的 _encode,即。(df::tile_page, df::tile_page*, df::tile_page&, df::tile_page**, 等等)...但这似乎没有必要?
我想创建一个模板来取消引用东西,但是我无法解决它。我尝试使用取消引用模板,但不断收到未定义的符号错误。
undefined symbol: json_spirit::Value_impl<json_spirit::Config_vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > encode<df::world>(df::world*)
当前模板:
template<typename T> T & dereference(T &v) { return v; }
template<typename T> T & dereference(T *v) { return dereference(*v); }
template <class T>
Value encode(T x) {
return _encode(dereference(x));
}
template <class T>
Value encode(T* x) {
return _encode(dereference(x));
}
主要思想是:要对某些内容进行编码,您调用一个模板,该模板将其取消引用,然后将其传递给生成的函数。他们反过来调用解引用模板来编码他们的任何字段。