我正在尝试用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]; }
感谢您的时间。
答案 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.
}