我想制作一个将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/