[英]C++ Calling overloaded operator from within a class
我有一个从另一个类继承的类,我想调用[index]
来访问某些已分配存储的index'元素。
这是一个最小的示例:
class A
{
protected:
double *mem;
double operator[](const size_t index)
{
return mem[index];
}
}
class B : public A
{
void function()
{
double var = this->operator[](0);
}
}
因此,在这里我通过调用this->operator[](0)
来解决问题,这很麻烦。
考虑到我无法从派生类访问该变量,这是访问mem
元素的正确方法,还是有另一种方法?
编辑:我认为符合C ++ 11可能很重要,所以不能称呼mem[0]
吗?
编辑模板类
如下所述,在此示例中并未显示我看到的编译器错误,因为此处没有模板。
重现编译器错误:
template <typename T>
class A
{
protected:
double *mem;
double operator[](const size_t index)
{
return mem[index];
}
}
template <typename T>
class B : public A<T>
{
void function()
{
double var = this->operator[](0);
}
}
可能的解决方案
return this->operator[](0);
return (*this)[0];
return (this->mem)[0];
return *((this->mem)+0);
return (*this).mem[0];
return *((*this).mem+0);
...我认为所有这些都符合我的期望。 还有其他建议吗?
更好的解决方案:
return A::mem[0];
正是我想要的!
您可以说(*this)[0]
。
在任何版本的C ++中,都没有阻止您使用mem[0]
。
是的,这是一个好方法。 您可以通过将其编写为(*this)[0]
来使通话更加愉悦。
但是,如果您不介意绕过基类的接口(我不会,实际上是将mem
private
),则可以编写mem[0]
!
如果您遇到麻烦,那是由于您的测试用例中没有。 例如, 如果它是类模板的基础成员 , 则由于C ++的奇怪性,您可能需要编写this->mem[0]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.