我应该如何编码?

时间:2012-01-09 04:14:08

标签: c++ templates json-spirit

我正在生成使用JSON spirit在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&amp;,df :: tile_page **等)......但这似乎没必要?

我想创建一个模板来取消引用内容,但是我无法解决这个问题。我已经尝试使用dereference template,但仍然会收到未定义的符号错误。

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));
}

主要思想是:要对您调用的模板进行编码,然后将其解除引用,然后将其传递给生成的函数。他们反过来调用解除引用模板来编码他们的任何字段。

0 个答案:

没有答案