c++ - std::function不起作用,但是普通的旧函数指针起作用-为什么?

标签 c++ pointers std function-pointers std-function

我想制作一个将std::function作为参数的函数,并在内部调用该函数:

void handleCollision(std::function<void(const Entity&)>& resolveCollision, const Entity& block) {
    if (playerInRangeOf(block) && playerIntersects(block)) {
        resolveCollision(block);
    }
}

和调用方(在同一类中):
for (auto&& block : blocks) {
    handleCollision(resolveCollisionAxisX, block);
}

错误:
Reference to non-static member function must be called
error: no matching function for call to 'StateGame::handleCollision(<unresolved overloaded function type>, Block&)'
handleCollision(resolveCollisionAxisX, block);
                                            ^

但是,如果我遵循C风格的函数指针:
void handleCollision(void (StateGame::*resolveCollision)(const Entity&), const Entity& block) {
    if (playerInRangeOf(block) && playerIntersects(block)) {
        (this->*resolveCollision)(block);
    }
}

然后它确实可以正常工作(调用者是相同的)。

如何使std::function工作?旁注:我不想使任何内容静态化。

最佳答案

将其包装在lambda中,更换

handleCollision(resolveCollisionAxisX, block)


[this](const Entity& e){
   this->resolveCollisionAxisX(e);
}

还要将std::function<void(const Entity&)>&替换为std::function<void(const Entity&)>const std::function<void(const Entity&)>&

关于c++ - std::function不起作用,但是普通的旧函数指针起作用-为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591309/

相关文章:

c - atol 对不同的字符串产生相同的结果

c++ - 为什么这个 std::sort 比较失败了?

c++ - 关于 Unix 上共享库的困境

c++ - ffmpeg:将 AVPixelFormat 视为 Int?

c++ - 如何将字符串文字传递给用 C++ 处理的函数?

java - 什么是 IDFS 下的分配函数,为什么指针分析是非分配的?

c++ - native-app 和 chrome-extension 之间的通信

c++ - 指针向下转换和向上转换的用法区别?

c++ - 为什么在循环中创建的对象具有相同的地址?

c++ - 在调用 std::map::find 时跟踪节点遍历?