是否有办法为类的指针定义括号操作符?
Is there any way to define bracket operator for pointer of a class?
实际上,我创建了一个类,给了它一个括号操作符,但因为它对我来说是一个指针比一个字段要好得多,我不得不这样使用它:
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所建议的,可能有比这样组织代码更好的方法。
相关文章:
- 在类外部定义重载流出操作符
- 对友元操作符的未定义引用
- 如何在c++中获取定义为友元的重载操作符的地址
- @操作符未定义
- 如何保存指针重定义操作符
- 模板结构中的友元操作符引发重定义错误
- 重载自定义类集的提取操作符
- c++迭代器操作符定义
- 定义ostream操作符的友元函数
- 如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
- 返回指向类定义的结构体的指针,多个作用域操作符
- c++用户定义的文字操作符可以传递空指针吗?
- Cxx-prettyprint(用于标准容器)在命名空间std中定义了它的输出操作符——这违反了标准吗?
- 操作符new已在带有库的自定义内存管理器中定义
- 用户定义对象的重载操作符==
- 定义操作符[]用于赋值和读取
- 定义操作符<为另一个结构体的两个对象在结构体中
- 唯一/shared_ptr自定义操作符=
- c++用户定义操作符<不能正常工作
- 名称空间和使用stl算法的用户定义操作符