基本上,我创建了一个类,给它一个括号运算符但是因为它更好地将它作为指针而不是字段,我必须像这样使用它:
auto* p = new wannabeArray();
(*p)[1] = 5;
有没有办法让p [1]正常工作?
答案 0 :(得分:4)
p[1]
的含义已由语言定义。它无法更改为指针。您只能为用户定义的类型定义。
答案 1 :(得分: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所说,组织代码可能有更好的方法,而不是像这样做。