有时候我发现自己添加了具有相同实现的重载,其中限定符中的const
和返回值是唯一的区别:
struct B {};
struct A {
const B& get(int key) const
{
if (auto i = map.find(key); i != map.end())
return i->second;
throw std::runtime_error{""};
}
B& get(int key)
{
if (auto i = map.find(key); i != map.end())
return i->second;
throw std::runtime_error{""};
}
private:
std::unordered_map<int, B> map;
};
是否有一种惯用的方法,可以只编写一次实现并摆脱比const_cast
更好的复制粘贴:
const B& get(int key) const
{
return const_cast<A*>(this)->get(key);
}
?
答案 0 :(得分:1)
Scott Meyers的建议:
当const和非const成员函数具有基本相同的实现时,可以通过使非const版本调用const版本来避免代码重复。