任何类型的缓存机制

时间:2017-07-28 10:55:18

标签: c++ caching boost

我正在尝试为我的项目设计一个缓存机制。基本上,我需要一个从字符串到值的映射,但是,我需要在运行时打开并确定该值。

我需要的是关于如何实现这一点的建议。

我的设计现在是:

  • 使用boost::any保存值
  • 使用std::unordered_map<std::string, boost::any>作为容器

我希望会员回馈原始类型,因为我希望缓存尽可能透明。用户应该使用这样的东西:

double      &p = cache.get("p");
std::string &q = cache.get("q");
hugeclass   &r = cache.get("r");

我正在考虑代替boost::any值,这样的私有结构:

struct internal
{
    boost::any value;

    template <typename T>
    T& get() { return boost::any_cast<T&>(value); } // Possible?
}

然而,我真的不知道这样的事情是否可能,或者如何真正得到这个。

那么,我怎样才能获得一个透明的缓存类,它返回对保持值的引用?

谢谢!

1 个答案:

答案 0 :(得分:1)

你可能可以逃脱这个:

double      &p = cache.get<double>("p");
std::string &q = cache.get<std::string>("q");
hugeclass   &r = cache.get<hugeclass>("r");

否则,我认为你的要求是不可能的。

更新:您可以尝试这样的设计:

double p;
cache.get("p", p);

使用get,如下所示:

template <typename T>
bool get(const std::string &key, T &output) const {
    // lookup...
    // return false if lookup failed
    output = boost::any_cast<T&>(...);
    return true;
}