如何定义一个没有重复代码的继承的 const 类成员函数?
How to define a const class-member function that is inheriting without duplicated-code?
我试图定义一个类(其最小版本(如下所示:
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&>
相关文章:
- 删除C++继承中虚拟类成员的代码重复
- 删除继承中的代码重复?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 如何编写将要继承的泛型代码?
- 继承、覆盖和虚函数,以避免重复代码
- 继承此C++代码有什么问题
- 多级继承程序代码的输出
- 代码在虚拟函数和继承方面未按预期工作
- 为什么下面的代码不会编译(c++中的继承)
- 为什么这个C++继承代码示例的行为是这样的
- 如何与模板正确重写此使用继承的C 代码
- 如何删除此与继承相关的代码气味
- 不重复代码的继承
- 继承可以用来减少C++中编译代码的大小吗?
- 继承代码出现C++错误(没有匹配的构造函数)
- 将多重继承C++代码移植到 Java
- 类继承代码不起作用
- 为什么clang和gcc在虚拟继承代码上存在分歧?
- C++11 继承代码无法使用 clang 进行编译
- 我如何访问继承代码的不同部分