gpt4 book ai didi

c++ - C++ 中不同类的方法映射

转载 作者:行者123 更新时间:2023-11-30 03:40:51 25 4
gpt4 key购买 nike

我正致力于将键盘输入映射到函数。我已经完成了它的重要部分,但现在我需要将一个字符串绑定(bind)到一个函数,以便在按下引用该字符串的键时调用它。

我知道我可以使用模板void BindStringToAction(std::string key, T* obj, R (T::*methodPointer)(float));

但问题是存储它以便继续使用。这些方法可以有一个基类,并且都可以有相同的输入 (float) 和返回类型 (void),但是将它们存储在映射中需要一个集合类名。

所以本质上问题是我如何存储字符串和方法指针的映射,后者可以在任何类中。

Unreal 做同样的事情,但我找不到实现或类似信息。我找到了 std::function 但这也依赖于不同的类名,因此我无法为它制作 map 。

最佳答案

在 C++11 中,您可以使用 lambda 来包装回调函数/方法。例如:

struct A {
void callback(float in) {
std::cout << "A : " << in << std::endl;
}
};

struct B {
void callback(float in) {
std::cout << "B : " << in << std::endl;
}
};

int main() {
A a;
B b;
std::map<std::string, std::function<void(float)>> callbacks;
callbacks["A"] = [&a](float in){a.callback(in);};
callbacks["B"] = [&b](float in){b.callback(in);};

callbacks["A"](3.14);
callbacks["B"](42.);
}

输出是:

A : 3.14
B : 42

这样,无论您的回调是函数、方法还是 lambda 都不重要。我将此系统用于与您正在做的事情类似的事情,它工作得很好。

关于c++ - C++ 中不同类的方法映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37780823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com