C++:如何返回指向非静态成员函数的指针?
Posted
技术标签:
【中文标题】C++:如何返回指向非静态成员函数的指针?【英文标题】:C++: How to return a pointer to a non-static member function? 【发布时间】: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 类的实例保存某些有用的变量,然后根据用户输入选择我需要的成员函数。但这不起作用,因为我得到“指向绑定函数的指针只能用于调用函数”。如何编写返回指向非静态成员函数的指针的函数?
【问题讨论】:
看到这个question。 【参考方案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
指针。因此出现错误消息。以上是关于C++:如何返回指向非静态成员函数的指针?的主要内容,如果未能解决你的问题,请参考以下文章
VS2015 Update 2 中指向非静态数据成员的指针不正确