我今天看到的代码如下:
result = (this->*(*c))(¶m)
令我困惑的主要部分是this->*(*c)
在箭头(->
)和我们正在访问的变量的名称之间设置星号运算符是什么意思({{ 1}})。
答案 0 :(得分:4)
这里有一个你经常看不到的操作员。
->*
是一个操作员。它是.*
的基于指针的对应项,是一个成员访问运算符。
如果您有一个对象使用成员(例如函数),但不知道具体成员(它存储在变量中),则使用它。
让我们把它分开:
this // object to work on
->* // member access operator
(*c) // dereference pointer pointing to member function (c is a pointer-to-pointer)
(¶m) // call member function stored in c on this passing ¶m to the function
另请参阅:http://en.cppreference.com/w/cpp/language/operator_member_access
修改:这篇文章还详细介绍了这里发生的事情:https://stackoverflow.com/a/6586248/1314789
答案 1 :(得分:0)
表达式的解析树是:
=
/ \
result function call
/ \
->* &
/ \ |
this * param
|
c
由于无聊的语法原因,括号是必要的。