给定一个指针调用括号重载

时间:2013-05-23 20:14:39

标签: c++ syntax operator-overloading parentheses

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

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);

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

3 个答案:

答案 0 :(得分:15)

是的,但你不会喜欢它:

pMyObj->operator()(2,3);

答案 1 :(得分:0)

如果你这样做

#define SUB operator()

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

pMyObj->SUB(2,3)

不像Fortran那样优雅;-)但实际使用可能不会太难看

答案 2 :(得分:0)

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

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

如果您的代码可能会被那些可能会被

搞糊涂的人阅读,那么这可能是一个不错的选择
pMyObj->operator()(2,3);