我在类Entity中有这个方法
template <class T>
T get_field(const std::string &content, const std::string &field_name)
{
JSONValue *value = JSON::Parse(content.c_str());
if (value == NULL)
{
LOG(ERROR) << "JSONValue is NULL";
return NULL;
}
if (value->IsObject())
{
JSONObject object = value->AsObject();
std::wstring ws;
for (int i = 0; i<field_name.length(); i++)
ws += wchar_t(field_name[i]);
if (object.find(ws) != object.end())
{
if (object[ws]->IsArray())
{
return object[ws]->AsArray();
}
else if (object[ws]->IsBool())
{
return object[ws]->AsBool();
}
else if (object[ws]->IsNull())
{
return NULL;
}
else if (object[ws]->IsNumber())
{
return object[ws]->AsNumber();
}
else if (object[ws]->IsObject())
{
return object[ws]->AsObject();
}
else if (object[ws]->IsString())
{
return object[ws]->AsString();
}
}
}
return NULL;
}
我正在调用这个方法:
e.get_field<std::string>(json, "Name")
我知道在这种情况下该方法应返回字符串,因此我在std::string
中添加了< ... >
。但是我得到了这个错误:
No viable conversion from 'const JSONArray' (aka 'const vector<JSONValue *>') to 'std::__1::basic_string<char>'
我知道,为什么我会收到此错误。因为在这种情况下,我无法返回非字符串类型的内容。如果我像这样称呼那个方法
e.get_field<JSONArray>(json, "numbers");
然后这也将是错误,因为我不能将字符串作为JSONArray返回。那么,如何防止这种情况呢?