我在一个项目中使用私有继承,在“使用”实现“-sense”。基类定义operator [],这是我想要使用的功能。因此,我有
class A : private B {
using B::operator[];
// ...
};
但是,如何控制运营商[]的版本?事实上,我需要多个const
和非const
版本。这可以实现吗?
答案 0 :(得分:6)
我的理解是你的using
应该自动引入运营商的所有不同重载。您是否希望将某些重载排除在子类中?在这种情况下,最好将工作分成父级中的几个不同命名的函数,而只需要using
个所需的函数。
答案 1 :(得分:2)
这样做符合预期:
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;
}
换句话说,适当的const /非const版本被注入B
。注意:如果未提供const版本,则会收到编译器错误(无论继承是私有还是公共,这都有效。)