c++ - C++:如何返回指向非静态成员函数的指针?
问题描述
我想做这样的事情:
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 类的实例保存某些有用的变量,然后根据用户输入选择我需要的成员函数。但这不起作用,因为我得到“指向绑定函数的指针只能用于调用函数”。如何编写返回指向非静态成员函数的指针的函数?
解决方案
您需要返回成员函数的地址,如下所示:
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;
}
推荐阅读
- python - 将箱线图的平均值绘制为箱线图
- typescript - 如何在 Typescript 中增加枚举?
- vue.js - vue.js 应用程序中的动态路由
- css - 我的外部容器如何正确对齐所有内部元素?
- c# - Azure Functions RunOnStartUp 在配置中而不是在编译时设置?
- python - CircleCI 上 Ubuntu 映像的文件权限
- excel - VBA脚本或其他东西自动按下按钮
- javascript - 溢出属性似乎不适用于导航链接的动画
- node.js - 出现错误:02016002:系统库:stat:共享主机计划上没有这样的文件或目录
- pthreads - 当变量被 2 个线程共享并受 pthread_mutex_lock 保护时,一个线程优先处理一个变量