设计两个等效的成员函数,分别返回const和非const指向成员

时间:2016-08-16 14:31:52

标签: c++ pointers const overloading member-functions

我有一个类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_constf内需要将const指针转换为非const 指针,这也是不可能的。

有没有优雅的声明方法,以避免代码翻倍?

如上所述,使用具有ff_const的共同功能的第三个函数 {{1}}这里不是一个选项,因为申请大量的时候 函数,它会降低代码的可读性。

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());
}

这通常是安全的,因为您是该类本身的设计者。