C++将成员类属性中的函数存储在另一个类中



我正在写一个在2D tileset上工作的小游戏。这个想法是,会有一些单元格(位置X,位置Y(,如果玩家迈出一步,就会触发一个事件,所以我创建了一个map<cell_position, function to trigger>

问题是,这个函数将在World类中,该类包含Npc成员,我想将Npc公共函数teleport存储为映射中的值,正如我可以在下一个片段中显示的那样:

std::unordered_map<std::pair<int, int>, std::function<void()>> actionCells =
{ std::make_pair(10, 1), std::bind(mPlayerNpc->teleport, 3, 3)) };

这样做可能吗?因为我得到了下一个错误:

错误:无效使用非静态成员函数'void Npc::transport(int,int('

-编辑------------------------------

如果我不想用Lambda,它是这样做的吗?

std::unordered_map<std::pair<int, int>, std::function<void()>> actionCells =
{ std::make_pair(10, 1), [&]() {mPlayerNpc->teleport(3, 3); } };

将类实例传递给std::bind应该可以。类似于:

std::unordered_map<std::pair<int, int>, std::function<void(int x, int y)>> actionCells =
{ std::make_pair(10, 1), std::bind(&ActualClassNameOfPlayerNpc::teleport, mPlayerNpc 3, 3)) };