C++;:从类内访问运算符[]的方便方法? 我有一个C++类,它重载运算符[]/COD>,数组下标/括号操作符。这在我的课堂之外非常方便,在那里我可以写foo[bar]。然而,当我在类中实现方法时,我不知道如何使用这个符号

C++;:从类内访问运算符[]的方便方法? 我有一个C++类,它重载运算符[]/COD>,数组下标/括号操作符。这在我的课堂之外非常方便,在那里我可以写foo[bar]。然而,当我在类中实现方法时,我不知道如何使用这个符号,c++,operator-overloading,C++,Operator Overloading,我知道我可以写operator[](bar)或this->operator[](bar),但这些都相当笨拙,从一开始就剥夺了操作员的很多便利。(我也知道我可以添加一个调用操作符的新方法。)有没有办法写这个[bar]或这个->[bar]或类似的好东西 (*this)[bar]; 对我来说很好。使用 (*this)[bar] 调用实例对象的操作符[] this[bar]将this指针视为一个数组,并对该数组的bar-第个元素进行索引(返回一个可能无效的对象引用)。您可以使用(*this)[bar

我知道我可以写
operator[](bar)
this->operator[](bar)
,但这些都相当笨拙,从一开始就剥夺了操作员的很多便利。(我也知道我可以添加一个调用操作符的新方法。)有没有办法写
这个[bar]
这个->[bar]
或类似的好东西

(*this)[bar];
对我来说很好。

使用

(*this)[bar]
调用实例对象的
操作符[]

this[bar]
this
指针视为一个数组,并对该数组的
bar
-第个元素进行索引(返回一个可能无效的对象引用)。

您可以使用(*this)[bar],但这可能不是很大的改进…

作为
(*此)[bar]的替代方法
是使用一个命名成员函数来执行
操作符[]
的工作。重载运算符使用户的操作更轻松。更重要的是,它们是类接口的一部分。问问自己,根据自己的公共接口实现类是否真的有意义。如果没有,我建议编写一个单独的(受保护的或私有的)成员函数来完成这项工作,然后让
操作符[]
和任何其他函数调用它。

我使用at()函数,让操作符[]在幕后调用at()函数,因此操作符[]只是语法上的糖分。这就是std::vector的工作方式,因此它似乎是一种合理的(具有优先权的)工作方式

现在来看一个完整的语法糖黑客(不能说我完全推荐它,但可能会引起你的兴趣):

另外,如果你想免费做这件事,而不需要支付参考资料的费用,是某个邪恶教派的追随者,他们致力于让程序员受苦,你可以这样做:

#define self (*this)
事实上,我认为这就是大多数句柄在苹果的NS API中的实现方式

 operator[](bar) 

这也应该奏效。这对我有用

从某种意义上说,我喜欢这样做,因为我在过去几分钟里一直在这样做,设置self=*这个,然后使用self。谢谢。Vector是另一种方式,因为Vector::at()在调用操作符[]()之前必须进行范围检查。使用
Widget&self
版本的注意事项:如果您仍然希望能够复制您的类,请使用
operator=
等,您将不得不编写大量额外的新样板文件。在我的问题中,这是我提到的第一个选择。
 operator[](bar)