【发布时间】:2016-06-13 01:49:04
【问题描述】:
我正在将键盘输入映射到函数。我已经完成了其中的很大一部分,但现在我需要将一个字符串绑定到一个函数,以便在按下引用该字符串的键时,它将被调用。
我知道我可以使用 模板 void BindStringToAction(std::string key, T* obj, R (T::*methodPointer)(float));
但问题是存储它以供继续使用。这些方法可以有一个基类,并且都可以有相同的输入(float)和返回类型(void),但是将它们存储在一个映射中需要一个设置的 ClassName。
所以本质上问题是我如何存储字符串和方法指针的映射,后者可以在任何类中。
Unreal 做同样的事情,但我找不到实现或类似信息。我找到了 std::function ,但这也依赖于不同的类名,因此我无法为它制作地图。
【问题讨论】:
-
您可以编写一个 Builder 来构建地图,然后存储一个列表,例如
pair<string, string>,它将作为 Builder 的一组指令。这样就够了吗? -
在 C++ 中没有“指向任何类的方法指针”这样的东西。你要求的是不可能的。你必须想出一种不同的方法来完成你想要完成的任何事情。 XY 问题。
-
std::function<void(float)> f = [=](float val) { obj->methodPointer(val); };。现在将其存储在std::map<std::string, std::function<void(float)>>
标签: c++ function pointers dictionary methods