C++ 如何通过保存在容器中的成员函数的指针调用?

C++ 如何通过保存在容器中的成员函数的指针调用?,c++,member-function-pointers,member-functions,function-call,class-members,c++17,C++,Member Function Pointers,Member Functions,Function Call,Class Members,C++17,我试图编写一个成员函数,该函数依次调用同一对象的其他成员函数,直到其中一个起作用 我想写如下: class myClass { bool A() { return false; } bool B() { return false; } bool C() { return false; } bool D() { return false; } void doIt() { const QList<bool (myClass::*) ()>

我试图编写一个成员函数,该函数依次调用同一对象的其他成员函数,直到其中一个起作用

我想写如下:

class myClass
{
   bool A() { return false; }
   bool B() { return false; }
   bool C() { return false; }
   bool D() { return false; }
   void doIt() 
   {
      const QList<bool (myClass::*) ()> funcs({
                      &myClass::A, &myClass::B, &myClass::C, &myClass::D
         });

      bool result(false);
      for (auto iter = funcs.cbegin(); !result && iter != funcs.cend(); ++iter) 
      {
         result = this->(*iter) ();
      }
   }
};
指向第二个左括号,g++报告

must use .* or ->* to call pointer-to-member function
指向第二个右括号,两个括号都在我指定给DoIt成员函数结果的行中。(请注意,g++错误消息中的示例运算符包含在grave重音符号中,但如果我包含它们,则标记会删除“*”)


我可以找到许多关于如何通过指向成员函数的指针进行调用的示例,但是如果将指向成员函数的指针保存在集合中并调用
this

这两种方法结合在一起,那么就什么都没有了,因为
()
操作符的优先级绑定,您需要添加更多的参数:

result = (this->*(*iter))();
除了@1201programalam的答案之外,如果您有权访问编译器,您可以通过使用from
头避免奇怪的语法

#include <functional> // std::invoke

result = std::invoke(*iter, this);
#包括//标准::调用
结果=标准::调用(*iter,this);

这个->*(*iter)(有效吗?不。QtCreator和g++都给出了相同的错误。另请参见使用中间变量
bool(myClass::*mfn)(=*iter
(或
auto-mfn=*iter
)确实有助于使代码可读,然后简单地用语法调用成员函数:
(this->*mfn)()太好了!非常感谢。这种语法非常奇怪,我不奇怪我自己不能解决它。
这个->**iter)(
就足够了。然而,为了更好的可读性,可以使用一个临时变量:
auto-mfn=*iter;(此->*最惠国待遇)(
。也谢谢你;我期待着得到一个
c++17
编译器。
#include <functional> // std::invoke

result = std::invoke(*iter, this);