gpt4 book ai didi

c++ - 如何获取通用函数指针作为 C++ 类的私有(private)成员?

转载 作者:太空狗 更新时间:2023-10-29 20:23:53 26 4
gpt4 key购买 nike

在我制作的游戏中,会有触发器。当触发器与任何东西发生碰撞时,就会发生一些事情;如果它是门触发器,那么玩家将被移动到一个新区域。如果它是爆炸触发器,就会发生爆炸。椅子触发器可能会让玩家坐下。

我不想对每个触发器进行子类化。每个人都共享足够多的重要信息,并且每个人都将使用一个通用界面激活。它们之间的唯一区别是碰撞时调用的例程。

问题是函数本身可能有不同的签名。

例如,移动播放器功能需要一些东西。

void move_player(Environment *new_env, Player *player, int new_x, int new_y)

但爆炸触发器可能只是

void explode()

我需要一个接受move_playerexplode 的类。

我认为伪代码应该是这样的

class Trigger
{
public:
Trigger(function_pointer f) { fp = f; }
void activate() { fp(); }

private:
func_pointer fp;
}

我在想初始化/使用它看起来像这样。

auto f = std::bind(move_player, new_environment, my_player, 0, 0);
Trigger tigger (f);
tigger.activate();

我尝试进入 std 文档并在其他论坛中搜索,同时查看 Boost 文档。我知道如何使用 bind,而且我很确定它应该在这里工作,但我不知道如何在类中设置函数指针使其成为对参数列表无动于衷的指针。一个最小的工作示例会很棒。

最佳答案

您可以将 std::functionstd::bind 和可变参数模板结合使用,如下例所示:

class Trigger {
std::function<void()> fp;
public:
template<typename F, typename ...Args>
Trigger(F f, Args... args) : fp(std::bind(f, args...)) { }
void activate() { fp(); }
};

LIVE DEMO

关于c++ - 如何获取通用函数指针作为 C++ 类的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947123/

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