是否有办法为类的指针定义括号操作符?

Is there any way to define bracket operator for pointer of a class?

本文关键字:定义 操作符 指针 是否      更新时间:2023-10-16

实际上,我创建了一个类,给了它一个括号操作符,但因为它对我来说是一个指针比一个字段要好得多,我不得不这样使用它:

auto* p = new wannabeArray();
(*p)[1] = 5;

是否有办法使p[1]正常工作?

p[1]的含义已经由语言定义。它不能为指针更改。

可以创建一个类来保存指针,例如

class wannabeHolder: boost::noncopyable
{
    wannabeArray *p;
public:
    wannabeHolder(wannabeArray *p): p(p) {}
    wannabeArray *operator->() { return p; }
    wannabeArray::value_type &operator[](size_t n) { return (*p)[n]; }
};

然而,你在这里重新发明了一部分轮子,或者至少是一些辐条。正如Alf所建议的,可能有比这样组织代码更好的方法。