C++ 使用指令的私有继承,重载?
我在一个项目中使用私有继承,从“实现方面”的意义上讲。基类定义运算符[],这是我想要使用的功能。因此,我有C++ 使用指令的私有继承,重载?,c++,inheritance,C++,Inheritance,我在一个项目中使用私有继承,从“实现方面”的意义上讲。基类定义运算符[],这是我想要使用的功能。因此,我有 class A : private B { using B::operator[]; // ... }; 但是,如何控制获取的运算符[]的版本?事实上,我需要不止一个,包括const和非const版本。这可以实现吗?我的理解是,您使用的应该会自动引入操作符的所有不同重载。是否有某些重载要排除在子类中?在这种情况下,最好在父函数中将工作拆分为几个不同名称的函数,并且只使用所
class A : private B {
using B::operator[];
// ...
};
但是,如何控制获取的运算符[]的版本?事实上,我需要不止一个,包括
const
和非const
版本。这可以实现吗?我的理解是,您使用的应该会自动引入操作符的所有不同重载。是否有某些重载要排除在子类中?在这种情况下,最好在父函数中将工作拆分为几个不同名称的函数,并且只使用所需的函数。这会按预期执行:
class A
{
public:
int operator[](int idx) { return 0; }
int operator[](int idx) const { return 1; }
};
class B : public A
{
public:
using A::operator[];
void opa() { cout << operator[](1) << endl; }
void opb() const { cout << operator[](1) << endl; }
};
int main(void)
{
B b;
b.opa();
b.opb();
const B d = B();
cout << d[1] << endl; // should trigger the const version of operator[]
return 0;
}
A类
{
公众:
int运算符[](int idx){返回0;}
int运算符[](int idx)常量{return 1;}
};
B类:公共A
{
公众:
使用::运算符[];
无效opa(){在这种情况下,你可以使用组合而不是私有继承给你想要的结果。是的,我知道…我将它改为私有继承以减少转发代码的数量。所以这是不可能的?函数是如何正确选择的?如果你改为使用组合,你的代码将更容易编写和维护在这里,私有继承是指,当它们不是绝对必要时,不使用C++的墙特征(从目前为止所说的,在这种情况下不需要私有继承)。。我也这么认为,但我从常量丢弃中得到编译错误,尽管有版本同时返回T&
和const T&
(模板类型名T),所以,这是其中一个“神奇地修复了自身”很多次……在上下查看代码并重新编译后,它突然起作用了,我一辈子都不明白我改变了什么。但真正改变的是我学到了更多关于继承的知识,所以谢谢!我还要添加b[2];
或类似于main
,表明操作员功能可直接从B类外部使用。