正在可能将任何类型的函数存储在一个可能的变量中
Is storing any type of function in one variable possible?
我正在尝试制作一个菜单阵列,其中每个元素是存储文本变量的struce,需要按下需要按键的键,以在该键上选择该项目和函数(诸如"退出"," q",quit())。我认为这会使事情变得更有效,但是我找不到一种使其与各种功能和参数类型一起使用的方法(例如,一个项目应该能够在没有参数的情况下调用void函数两个参数等)。有什么好方法还是最好放弃这个想法?
编辑:谢谢大家的建议!拟议的解决方案对我的新手自我来说感觉太复杂了,但是试图理解它们给了我一些想法!我最终使第三个变量保存了枚举,而不是直接函数调用,然后创建了一个基于该值调用其他函数的开关函数。
实际上有几种方法。
一种方法是使用std::bind
将所有功能绑定到void func(void)
,然后您可以平等存储它们。
另一种方法是创建一个通用函数/lambda,该函数称为您的功能。
要存储您的功能,您可以使用std::function
。
还考虑您的课程中的operator()
。
处理此操作的经典方法是使所有函数都采用相同的参数,并且这些函数非常灵活。例如,整数或枚举以及指针。
- 您的无参数功能通过-1和
nullptr
,忽略它们 - 您的多参数函数将指针铸造为指向某些结构或类的指针,该指针包含所需的所有位和零件(当然,您的呼叫代码当然制作了该实例并通过了其地址)
将枚举或整数悬挂为参数之一的原因是,"命令类型"是一件非常受欢迎的事情,那么为什么要所有的铸造和提取以获取它?
如果您由于这种方法而遇到了性能问题,那么还有其他问题,但是这实际上已经在Windows中使用了数十年。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 用C++中的一个变量定义一个常量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 全局变量 多读取器 一个写入器多线程安全?
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 一个变量的输入值也会保存到另一个变量中
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在另一个函数 (c++) 中调用变量
- 将双精度变量设置为另一个变量的值
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如果我注释掉换行符,为什么'string'会成为一个不合格的变量
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- C++使用cin给变量一个非整数的值
- 怎么可能有两个同名的变量——一个是全局变量,另一个是局部变量