【发布时间】:2010-10-25 18:52:52
【问题描述】:
当你拥有它时你不讨厌它
class Foobar {
public:
Something& getSomething(int index) {
// big, non-trivial chunk of code...
return something;
}
const Something& getSomething(int index) const {
// big, non-trivial chunk of code...
return something;
}
}
我们不能用另一种方法实现这两种方法,因为您不能从const 版本调用非const 版本(编译器错误)。
需要演员才能从非const 调用const 版本。
有没有真正优雅的解决方案,如果没有,最接近的解决方案是什么?
【问题讨论】:
-
我认为你需要指出大块代码可能是什么,至少要说明为什么它不能放在单独的函数中。
-
模板库显式地为某些类型创建一个“constType”。这避免了所有提到的其他方法的问题(需要一点纪律)。
-
重新问这个问题是非常合理的。建议的副本来自 2008 年,因此我们现在有 2 个新标准 (c++11|14),它们可能提供比建议副本中提供的更优雅的解决方案。特别是因为建议的 const_cast 是一个糟糕的解决方案!请注意,此问题要求 elegant 解决方案,建议的副本中未要求该解决方案,也未在此处给出。