gpt4 book ai didi

c++ - 返回指向缓存在 std::map 中的项目的指针

转载 作者:行者123 更新时间:2023-11-30 00:36:22 25 4
gpt4 key购买 nike

我有一个充当缓存的类。它有以下私有(private)成员:

std::map<std::string, Foo> _cache;

我需要为此缓存编写一个 getter,它返回指向存储在缓存中的 Foo 对象的引用、指针、迭代器或智能指针。如果需要,我希望客户端能够通过 getter 更新 Foo 对象。

但是,如果在缓存中找不到该项,我不希望 getter 抛出异常。相反,客户端应该测试返回值以确定是否找到该项目。但是,如果您推荐这种方法,我可以说服您抛出。

您会为我的 getter 推荐哪种返回类型?

我正在使用 boost 和 C++98。

最佳答案

听起来你需要一个 boost::optional<Foo&>返回值(optional references)。您的代码应如下所示:

class YourCache {
std::map<std::string, Foo> _cache;
public:
boost::optional<Foo&> FooByName(const std::string& name)
{
std::map<std::string, Foo>::iterator itr = _cache.find(name);
if(_cache.end() == itr)
return boost::none;
return boost::optional<Foo&>(itr->second);
}
};
  • getter 不会抛出 :)
  • 尊重 _cache 的现有实现(您不必更改它来存储智能指针 - 或一般指针)
  • 在客户端代码中不提供对内存的直接访问(就像返回 Foo* 那样)
  • 以最好的方式表达意图(“返回值是可选的/可能会丢失”)
  • 在客户端代码中提供一个明确且自然的接口(interface):

例如:

// client code:
if (boost::optional<Foo&> result = YourCache.FooByName("FOO")) {
// only run if result is in cache
result->bar();
}

关于c++ - 返回指向缓存在 std::map 中的项目的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103541/

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