是否可以将任何类型的函数存储在一个变量中?

问题描述 投票:11回答:2

我正在尝试创建一个菜单数组,其中每个元素都是一个存储文本变量的结构,需要按下该键才能选择该按键上调用的项目和函数(类似“退出”,“Q”,退出())。我认为这会使事情变得更有效率,但我找不到一种方法来使它适用于各种函数和参数类型(例如,一个项应该能够调用没有参数的void函数,另一个类是int函数,两个参数等)。有没有一个好方法可以做到这一点,还是我最好放弃这个想法?

编辑:谢谢大家的建议!建议的解决方案对我的新手自我感觉有点过于复杂,但试图理解它们给了我一些想法!我最终使第三个变量保持枚举而不是直接函数调用,然后创建了一个基于该值调用其他函数的开关函数。

c++ function variables
2个回答
9
投票

实际上有几种方法可以做到这一点。

一种方法是使用std::bind将所有函数绑定到void func(void),然后您可以平等地存储它们。 另一种方法是创建一个通用函数/ lambda来调用你的函数。 要存储您的功能,您可以使用std::function

还要考虑覆盖你班级的operator()


1
投票

处理这个问题的经典方法是让所有函数采用相同的参数,并使这些函数非常灵活。例如,整数或枚举,以及指针。

  • 你的无参数函数传递-1和nullptr并忽略它们
  • 你的多参数函数将指针强制转换为指向某个结构或类的指针,该结构或类包含它需要的所有部分(当然,你的调用代码生成了该实例并传递了它的地址)

枚举或整数作为参数之一被提升的原因是“命令类型”是一个非常受欢迎的东西需要,那么为什么所有那些铸造和提取得到它?

如果这种方法导致性能问题,那么还有其他问题,但这已经在Windows中使用了几十年。

© www.soinside.com 2019 - 2024. All rights reserved.