gpt4 book ai didi

c++ - C++ 中枚举和 lambda 的映射

转载 作者:行者123 更新时间:2023-11-30 05:13:55 28 4
gpt4 key购买 nike

目前正在开发一款小型第三人称游戏,我在使用 map 中的 lambda 时遇到了一些问题。我想将一个函数映射到一个特定的枚举元素。再具体一点:我有一个键码 vector

std::vector<EKEY_CODE> _keys;

它保存枚举中给定的元素:

enum EKEY_CODE
{
KEY_LBUTTON = 0x01, // Left mouse button
KEY_RBUTTON = 0x02, // Right mouse button
// ...
}

对于函数调用,我选择了取图:

using KeyMap = std::map<EKEY_CODE, std::function<void(const EKEY_CODE&, f32, f32)>>;

在 Game.h 文件中声明:

KeyMap _keyActions;

在构造函数中填充键 vector :

Game::Game() : 
_keys({ KEY_KEY_W, KEY_KEY_A,
KEY_KEY_S, KEY_KEY_D, KEY_KEY_C, KEY_LSHIFT, KEY_SPACE })
{
// ...
}

现在,我做了一个函数来填充按键映射:

void Game::fillMaps() {

auto move = [](const EKEY_CODE&, f32 movSpeed, f32 fdt) {
// do funny things here
};

for (EKEY_CODE& key : _keys) {
_keyActions.insert(key, move);
}

现在我的问题是 IntelliSense 说“没有重载函数的实例 std::map<_Kty, _Ty, _Pr, _Alloc>::insert [...] 匹配参数列表”。如我所见,我已经为 lambda 函数提供了所有参数的正确方法。有什么我可能没有看到的吗? map 的 insert 函数不应该能够处理 lambda 函数吗?

提前致谢!

最佳答案

尝试

_keyActions.insert({key, move});

_keyActions[key] =  move;

_keyActions.insert(std::make_pair(key, move));

或者更好:

_keyActions.emplace(key, std::move(move));

关于c++ - C++ 中枚举和 lambda 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665789/

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