【发布时间】:2021-12-20 20:22:16
【问题描述】:
我正在编写一个在 2D 瓷砖集上运行的小游戏。这个想法是会有一些单元格(位置 X,位置 Y),如果玩家踩到,它将触发一个事件,所以我创建了一个 map<cell_position, function to trigger>。
问题是这个函数将在 World 类中,包含 Npc 成员,我想将 Npc 公共函数 teleport 存储为地图中的值,我可以显示在下一个sn-p:
std::unordered_map<std::pair<int, int>, std::function<void()>> actionCells =
{ std::make_pair(10, 1), std::bind(mPlayerNpc->teleport, 3, 3)) };
这可能吗?因为我遇到了下一个错误:
错误:无效使用非静态成员函数 'void Npc::teleport(int, int)'
---编辑-----------------------------------
如果我不想使用 Lambda,是这样完成的吗?
std::unordered_map<std::pair<int, int>, std::function<void()>> actionCells =
{ std::make_pair(10, 1), [&]() {mPlayerNpc->teleport(3, 3); } };
【问题讨论】:
-
mPlayerNpc.teleport没有正确描述实例teleport需要被调用。您需要更像&TYPE::teleport, &mPlayerNpc的东西来指定被调用的函数和实例。也就是说,请考虑使用Lambda expression 而不是std::bind。 Lambda 通常更容易处理并且运行时开销更少。 -
是的,这是可能的。将
std::bind与非静态成员一起使用时,您需要一个实例来通过引用、地址或占位符(如果需要)进行绑定。你没有做任何这些。 -
@user4581301 我已经编辑了帖子,并添加了如何使用 lambda 表达式。你有什么例子吗?
-
你的问题完全是关于如何使用
std::bind调用成员函数,这在stackoverflow.com/questions/37636373/…等大量问题中得到了解答
标签: c++