C++ - 将函数链接到触发器的有效和高效方法
C++ - Effective and efficient way of linking functions to triggers
我的程序中的 UI 系统目前的工作原理是将类型为void(*)()
的函数指针分配给具有可指定调用条件的触发元素(屏幕上的四边形、键盘上的键(,该条件将与键的实际条件(使用 GLFW(、鼠标按钮或光标每帧进行比较,以确定是否应调用回调函数。 可以KeyCondition(PRESS, LEFT_SHIFT)
一个键的条件,如果在按住左移键时按下键,该条件将调用绑定到键的回调。
我的问题是我只能分配这些类型的按钮函数void(*)()
,这使我无法将参数传递给按钮回调。 例如,如果我想让一个按钮在光标悬停在按钮上时亮起,我将不得不创建一个指定的函数void highlightButtonA()
该函数在内部将按钮A
的颜色设置为更高的值,而我当然更愿意能够将回调设置为类似void offsetColor(unsigned int buttonIndex, float r, float g, float b, float a)
并将单独的参数传递给每个回调。
有什么办法可以做到这一点吗?是否有一些函数指针可以指向任何形状的函数并以某种方式存储参数?我应该为这些解决方案的性能担心多少?我的程序必须能够每秒处理多次按键/按钮按下并保持稳定,因为它是一款快节奏的射击游戏。
您可以使用衰减的非捕获 lambda 来函数指针,如下所示:
button.OnMouseHover([]{ offsetColour(buttonIndex, r, g, b, a); });
请记住,buttonIndex
和其他要offsetColour
的参数应该是文字,因为 lambda 无法从封闭作用域捕获变量。
相关文章:
- C++中高效的大型稀疏块压缩线性方程
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 如何在C++中高效地构造随机骰子
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- C++ - 将函数链接到触发器的有效和高效方法