模板返回值错误

时间:2015-08-05 19:49:17

标签: c++ oop templates

我在类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返回。那么,如何防止这种情况呢?

0 个答案:

没有答案