【问题标题】:C++: How to return a pointer to a non-static member function?C++:如何返回指向非静态成员函数的指针?
【发布时间】:2020-05-23 20:27:55
【问题描述】:

我想做这样的事情:

typedef int(A::*f_ptr)(int);
class A
{
    int f1(int a){ /*do something*/ }
    int f2(int a){ /*do something else*/ }
    f_ptr pick_f(int i)
    {
         if(i)
              return this->f1;
         return this->f2;
    }
}

原因是我希望 A 类的实例保存某些有用的变量,然后根据用户输入选择我需要的成员函数。但这不起作用,因为我得到“指向绑定函数的指针只能用于调用函数”。如何编写返回指向非静态成员函数的指针的函数?

【问题讨论】:

标签: c++ pointers member-function-pointers


【解决方案1】:

你需要返回成员函数的地址,像这样:

f_ptr pick_f(int i)
{  
  if(i)
    return &A::f1;
  return &A::f2;
}

或等效的简洁版本:

f_ptr pick_f(int i)
{
  return i ? &A::f1 : &A::f2;
}

【讨论】:

  • 为了展开,您在这里所做的是“解绑”它们。也就是说,不再有“绑定”this 指针。因此出现错误消息。
猜你喜欢
  • 2018-01-02
  • 2010-11-02
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多