gpt4 book ai didi

c++ - 任何类型的缓存机制

转载 作者:行者123 更新时间:2023-11-28 05:03:26 25 4
gpt4 key购买 nike

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

我需要的是关于如何实现它的建议。

我现在的设计是这样的:

  • 使用boost::any保持值(value)
  • 使用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 代替值,像这样的私有(private)结构:

struct internal
{
boost::any value;

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

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

那么,我怎样才能得到一个透明的缓存类来返回对持有值的引用呢?

谢谢!

最佳答案

你可能会逃脱这个:

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;
}

关于c++ - 任何类型的缓存机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45371646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com