正在可能将任何类型的函数存储在一个可能的变量中

Is storing any type of function in one variable possible?

本文关键字:变量 一个 函数 任何 类型 存储      更新时间:2023-10-16

我正在尝试制作一个菜单阵列,其中每个元素是存储文本变量的struce,需要按下需要按键的键,以在该键上选择该项目和函数(诸如"退出"," q",quit())。我认为这会使事情变得更有效,但是我找不到一种使其与各种功能和参数类型一起使用的方法(例如,一个项目应该能够在没有参数的情况下调用void函数两个参数等)。有什么好方法还是最好放弃这个想法?

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

实际上有几种方法。

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

还考虑您的课程中的operator()

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

  • 您的无参数功能通过-1和nullptr,忽略它们
  • 您的多参数函数将指针铸造为指向某些结构或类的指针,该指针包含所需的所有位和零件(当然,您的呼叫代码当然制作了该实例并通过了其地址)

将枚举或整数悬挂为参数之一的原因是,"命令类型"是一件非常受欢迎的事情,那么为什么要所有的铸造和提取以获取它?

如果您由于这种方法而遇到了性能问题,那么还有其他问题,但是这实际上已经在Windows中使用了数十年。

相关文章: