为 class 的每个实例定义不同的函数

Define a different function for each instance of a class

说我有这个 class:

class Object {
  public:
    int x;
    int y;

    void update(SDL_Event);
    void start();
};

我希望能够使 startupdate 在实例之间改变行为。

我试过使用函数指针,像这样:

class Object {
  public:
    int x;
    int y;

    void (*update)(SDL_Event);
    void (*start)(void);
};

void teststart() {
  x++;
  return;
}

在我的 main() 中,我这样做:

testlevel.objs[1].start = teststart;

但是,我无法从 class.

中引用变量

我确定我忽略了一些明显的东西,但是当指针位于 class 中时在线搜索没有结果。

也许函数指针不是正确答案?

您需要将函数 pointer/reference 传递给 Object 实例,例如:

class Object {
  public:
    int x;
    int y;

    void (*doupdate)(Object*, SDL_Event);
    void (*dostart)(Object*);

    void update(SDL_Event event) { if (doupdate) doupdate(this, event); } 
    void start() { if (dostart) dostart(this); }
};
void teststart(Object* obj) {
  obj->x++;
}

void testupdate(Object* obj, SDL_Event event) {
  // update obj as needed...
}

Object &obj = testlevel.objs[1];
obj.dostart = teststart;
obj.doupdate = testupdate;

否则,使用 std::function 捕获 lambda:

#include <functional>

class Object {
  public:
    int x;
    int y;

    std::function<void(SDL_Event)> update;
    std::function<void()> start;
};
Object *obj = &(testlevel.objs[1]);

obj->start = [obj](){
  obj->x++;
};

obj->update = [obj](SDL_Event event){
  // update obj as needed...
};