如何定义一个没有重复代码的继承的 const 类成员函数?

How to define a const class-member function that is inheriting without duplicated-code?

本文关键字:继承 代码 const 成员 函数 定义 何定义 一个      更新时间:2023-10-16

我试图定义一个类(其最小版本(如下所示:

class Base{
int i;
public:
Base(int i_): i(i_){}
int& at(size_t index) {return i;}
const int& at(size_t index) const {return i;}
};

(是的。它有一个index因为我真正想要创建的类总是需要它,所以以免想象它是必要的( 我想继承这样的类:

class SonClass : public Base{
public:
SonClass(int i): Base(i){}
int& at(size_t index){
do_something_more();
return Base::at(index);
}
const int& at(size_t index) const {
do_something_more();
return Base::at(index);
}
};

似乎at函数的版本都是相同的。无论如何要避免这种情况吗?或者有什么更好的方法可以做到?这看起来很基本,但因此我有 5 个相同的功能。

Thi 是少数几个const_cast有用的情况之一。您可以按如下方式使用它:

int& at(size_t index)
{
return const_cast<int&>(std::as_const(*this).at());
}

在 c++17 之前,您可以将std::as_const替换为static_cast<const my_class&>