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类
外部使用。