我有一个类A
和一个成员函数f
,它返回一个指针
实例的一些内容
int* A::f() {
// common code ...
return &(this->some_container[some_index])
}
现在,我需要一个模拟函数,它只返回一个const
指针,
即。
const int* A::f_const() const {
// exactly the same lengthy code ...
return &(this->some_container[some_index]);
}
请注意,作为"冗长的代码"不会更改A
的实例,
这也使函数const
w.r.t.实例(第二个
const
声明)。
我的问题:现在我想知道是否有一些解决方案可以避免代码 加倍,不使用第三个功能。
一方面,在f
内调用f_const
将是非法的,因为f
不是
const
w.r.t。拥有的实例。另一方面,呼叫f_const
在f
内需要将const
指针转换为非const
指针,这也是不可能的。
有没有优雅的声明方法,以避免代码翻倍?
如上所述,使用具有f
和f_const
的共同功能的第三个函数
{{1}}这里不是一个选项,因为申请大量的时候
函数,它会降低代码的可读性。
答案 0 :(得分:0)
我想假设答案可能取决于特定的上下文(例如函数的长度代码,返回的类型等等。)
总的来说,根据我的经验,最实用的,即使可能有点丑陋的解决方案是 const cast operator 。
只需实现 const 方法,并在非const 其他方法中进行转换。类似的东西:
const int* A::f_const() const {
return &(this->some_container[some_index]);
}
int* A::f() {
return const_cast<int*>(f_const());
}
这通常是安全的,因为您是该类本身的设计者。