我正在学习SFML,发现类resourceholder 中存在两个get 函数很奇怪。但它们实际上彼此完全相同。
我的问题是:为什么有两个get函数?
代码如下:
template <typename Resource, typename Identifier>
class ResourceHolder
{
public:
void load(Identifier id, const std::string& filename);
template <typename Parameter>
void load(Identifier id, const std::string& filename, const Parameter& secondParam);
Resource& get(Identifier id);
const Resource& get(Identifier id) const;
private:
void insertResource(Identifier id, std::unique_ptr<Resource> resource);
private:
std::map<Identifier, std::unique_ptr<Resource>> mResourceMap;
};
最佳答案
它们不一样。一个返回 Resource &
,另一个返回 const Resource &
。
这样在 const 对象上调用的 get()
返回一个 const 引用,在非 const 对象上调用的 get()
返回一个非 const引用。据推测,其目的是允许调用者更新此类正在包装的资源,但仅限于非常量对象。
关于c++ - 为什么类中需要一个 const 函数和一个非常量函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25822421/