我有一个继承自另一个类的类,我希望调用[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];
正是我想要的!
答案 0 :(得分:6)
你可以说(*this)[0]
。
在任何版本的C ++中,没有什么能阻止你使用mem[0]
。
答案 1 :(得分:0)
是的,这是一个很好的方法。您可以通过将其写为(*this)[0]
来使电话更令人愉悦。
但是,如果你不介意绕过基类的界面(我不会 - 我实际上是mem
private
),你可以写{ {1}}!
如果你遇到麻烦,那是因为你的测试用例中没有。例如,if it's a base member in a class template, you may need to write this->mem[0]
due to a C++ oddity。