如何定义一个不带重复代码的const类成员函数?

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

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个功能都相同的东西。

iCMS 回答:如何定义一个不带重复代码的const类成员函数?

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&>

本文链接:https://www.f2er.com/2038372.html

大家都在问