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

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

我正在尝试定义一个 class(其最小版本)如下所示:

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 总是需要它,所以以免想象它是必要的) 我想像这样继承 class:

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 个功能因此都是相同的。

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

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

C++17 之前你可以用 static_cast<const my_class&>

替换 std::as_const