我可以使用以下签名重载括号运算符:
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);
有没有办法使用->
运算符来调用()
重载?
答案 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);