是否可以将任何类型的函数存储在一个变量中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以将任何类型的函数存储在一个变量中?相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个菜单数组,其中每个元素都是一个存储文本变量的结构,需要按下该键才能选择该按键上调用的项目和函数(类似“退出”,“Q”,退出())。我认为这会使事情变得更有效率,但我找不到一种方法来使它适用于各种函数和参数类型(例如,一个项应该能够调用没有参数的void函数,另一个类是int函数,两个参数等)。有没有一个好方法可以做到这一点,还是我最好放弃这个想法?
编辑:谢谢大家的建议!建议的解决方案对我的新手自我感觉有点过于复杂,但试图理解它们给了我一些想法!我最终使第三个变量保持枚举而不是直接函数调用,然后创建了一个基于该值调用其他函数的开关函数。
答案
实际上有几种方法可以做到这一点。
一种方法是使用std::bind
将所有函数绑定到void func(void)
,然后您可以平等地存储它们。
另一种方法是创建一个通用函数/ lambda来调用你的函数。
要存储您的功能,您可以使用std::function
。
还要考虑覆盖你班级的operator()
。
另一答案
处理这个问题的经典方法是让所有函数采用相同的参数,并使这些函数非常灵活。例如,整数或枚举,以及指针。
- 你的无参数函数传递-1和
nullptr
并忽略它们 - 你的多参数函数将指针强制转换为指向某个结构或类的指针,该结构或类包含它需要的所有部分(当然,你的调用代码生成了该实例并传递了它的地址)
枚举或整数作为参数之一被提升的原因是“命令类型”是一个非常受欢迎的东西需要,那么为什么所有那些铸造和提取得到它?
如果这种方法导致性能问题,那么还有其他问题,但这已经在Windows中使用了几十年。
以上是关于是否可以将任何类型的函数存储在一个变量中?的主要内容,如果未能解决你的问题,请参考以下文章