10

我可以使用以下签名重载括号运算符:

char& operator()(const int r, const int c);

它的预期用途是:

// myObj is an object of type MyClass
myObj(2,3) = 'X'
char Y = myObj(2,3);

哪个按我的预期工作。但是,在处理指针时使用括号运算符会变得很复杂。我想要做:

// pMyObj is a pointer to an object of type MyClass
pMyObj->(2,3) = 'X';
char Y = pMyObj->(2,3);

但是,这样的语法会产生错误Error: expected a member name(至少在 VisualStudio 中)。

以下内容确实有效,但在我看来,取消引用和括号多于参数让我感到困惑。

char X = (*pMyObj)(2,3);

有没有办法使用->运算符来调用()重载?

4

3 回答 3

16

是的,但你不会喜欢它:

pMyObj->operator()(2,3);
于 2013-05-23T20:15:24.357 回答
0

如果您按照以下方式进行操作

#define SUB operator()

然后你可以写这样的东西......

pMyObj->SUB(2,3)

不如 Fortran 优雅 ;-) 但在实际使用中可能不太难看

于 2017-11-08T19:06:05.627 回答
0

您还可以创建对指向对象的引用并执行

MyObj& rMyObj = *pMyObj;
char Y = rMyObj(2, 3);

如果您的代码会被可能被

pMyObj->operator()(2,3);
于 2018-05-30T09:15:53.517 回答