說我有這門課:
class Object {
public:
int x;
int y;
void update(SDL_Event);
void start();
};
我希望能夠在實體之間做出start和改變行為。update
我嘗試過使用函式指標,如下所示:
class Object {
public:
int x;
int y;
void (*update)(SDL_Event);
void (*start)(void);
};
void teststart() {
x ;
return;
}
在我的 中main(),我這樣做:
testlevel.objs[1].start = teststart;
但是,我無法從類內部參考變數。
我確信我忽略了一些明顯的東西,但是當指標在類中時,在線搜索不會產生任何結果。
也許函式指標不是正確的答案?
uj5u.com熱心網友回復:
您需要將您的函式傳遞給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...
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479306.html
