将函数指针和对象放在一起

时间:2018-09-25 19:07:35

标签: c++

我尝试将对成员函数(func)的引用赋予函数(Multiprotocol),并使用此类的对象(z)对其进行调用。 但是我在生产线方面遇到了问题

result = z.*f(std::forward<Args>(args)...));

我尝试过

z.(*f) (std::forward<Args>(args)...)) 

z.(*(&f)(std::forward<Args>(args)...));

但是我不知道该怎么做。有人可以帮我吗?

class test
{ 
   public:
        static int func()
        {
            std::cout << "in func";
        }
 };


class MultiProtocol
{
   public:

      template<typename Function, typename... Args>
      bool functionImpl(Function f, Args&&... args)
      {
         int result = 0;
         result = z.*f(std::forward<Args>(args)...));
         return result;
      }

      private:
      test z;
};

主要是:

int main()
{
MultiProtocol rr;
rr.functionImpl(&test::func);

}

1 个答案:

答案 0 :(得分:0)

几乎是:

z.(*f) (std::forward<Args>(args)...))

不能

  • z.(*(&f)(std::forward<Args>(args)...));
  • .*

我们应该使用运算符->*(或z.*f(std::forward<Args>(args)...))。

f(args...)是有效的,如果int test::*会返回z .* (f(std::forward<Args>(args)...))(实际上是/* connect to gmail */ $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; $username = 'xxxxx@gmail.com'; $password = 'xxxxx'; $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); /* grab emails */ $emails = imap_search($inbox,"RECENT"); 的成员上的指针)。