【发布时间】:2013-04-19 11:26:42
【问题描述】:
我有一个充当缓存的类。它有以下私有成员:
std::map<std::string, Foo> _cache;
我需要为此缓存编写一个 getter,它返回一个引用、指针、迭代器或智能指针,指向存储在缓存中的 Foo 对象。如果需要,我希望客户端能够通过 getter 更新 Foo 对象。
但是,如果在缓存中找不到该项目,我不希望 getter 抛出。相反,客户端应该测试返回的值以确定是否找到了该项目。但是,如果您推荐这种方法,我可以说服我投掷。
你会为我的 getter 推荐什么返回类型?
我正在使用 boost 和 C++98。
【问题讨论】:
-
如何从缓存中获取项目?项目是否总是由 std::string 标识?如果您希望客户端能够修改索引字符串(我假设它也是 Foo 的成员),那么您的地图索引完整性就有问题。如果 index 不是 Foo 的成员,则指针或引用是安全的。否则,我建议您重新考虑写入启用缓存,仅返回 const 引用。
-
std::string 用于查找。它不应该从外面改变。
-
返回指针有什么问题吗?如果找不到对象,则可以为 NULL。
-
你看过 boost::optional 吗?