Yol*_*ola 5 c++ overloading const
我有两个成员
A &B::GetA (int i)
{
return *(m_C[m_AtoC[i]]);
}
const A &B::GetA (int i) const
{
return *(m_C[m_AtoC[i]]);
}
Run Code Online (Sandbox Code Playgroud)
现在我只是重复代码,但可能存在很好的方法来做到这一点.我绝对不想处理从const到非const的类型转换.
编辑:所以我想打电话给另一个成员,以避免代码重复.
[注意更正;抱歉一开始弄错了。]
这是使用 a 的合适情况const_cast,它允许您通过将调用从非常量函数转发到相应的 const 函数来消除重复代码:
A & B::GetA(int index)
{
return const_cast<A &>(static_cast<B const *>(this)->GetA(index));
}
Run Code Online (Sandbox Code Playgroud)
重要的是要注意,这应该只在一个方向上完成:您可以non-const根据常量来实现该方法,但反之则不然:常量调用GetA()获取对所讨论对象的常量引用,但由于我们如果有额外的信息表明改变对象实际上是可以的,我们就可以安全地从结果中抛弃常量性。
Scott Meyer 的《Effective C++》中甚至有一章专门介绍了这种技术。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |