返回任何数据类型的C ++方法。

时间:2015-08-20 08:05:15

标签: android c++ ios json

我正在尝试用C ++实现iOS和Android的缓存类。我正在使用nlohmann JSON(https://github.com/nlohmann/json)进行缓存。

我有一个基本的C ++类

class Cache
{
private:
 static Cache *instance;
 json j;
public:
 static bool fileExists();
 static Cache* getInstance();

template<typename T> void add(string key, T t) { j[key] = t; }
//template<typename T> T get(string key) { return j[key]; }
void persist();

string toString(); 
};

正如您所看到的,我实施了“添加&#39;接受任何类型作为第二个参数的方法。这是我在Objective C ++类中的一个例子。

    cache = Cache::getInstance();

    cache->add("one", "test");
    cache->add("two", true);
    cache->add("three", 199.9);
//  auto obj = cache->get<void*>("test");
    NSLog(@"%s", cache->toString().c_str()); 

当我将结果打印到控制台时,我得到了正确的数据。现在我的问题是我如何实现&#39; get&#39;返回任何类型的方法。我在google上到处寻找并找不到解决方案。

如果我想在Objective C中实现它,我将使用(id)返回任何类型,如下面的

- (id)get:(NSString *)key

我试过这个并且我收到了错误:

auto get(string key) { return j[key]; }

感谢您的时间。

1 个答案:

答案 0 :(得分:5)

nlohmann JSON提供了极大的灵活性,您的问题解决方案很简单,返回json类型的对象。您的功能应如下所示:

json get(string key)
{
    return j[key];
}

或者,您可以尝试:

json get(string key)
{
    try
    {    return object.at(key); }
    catch (std::out_of_range)
    {    return null; } //If the key is not present.
} 
相关问题