我正在嘗試為我正在開發的游戲創建一個動態法術系統:法術應該由一個原型組成,例如效果區域和效果,例如治療。
我有以下(簡化的)代碼:
class SpellEffect {
public:
virtual void heal(int magnitude);
}
class SpellArchetype {
public:
virtual void applyToArea(int sizeOfArea, void (*func)(int));
}
class Spell {
SpellEffect effect;
SpellArchetype archetype;
int sizeOfArea;
int magnitude;
public:
void cast() {
archetype.applyToArea(sizeOfArea, &effect.heal);
}
}
但是,因為heal()
是成員函式,所以這不起作用。
我也無法將引數傳遞magnitude
給heal()
函式。
我發現了這個問題,答案似乎很有幫助。然而,自從我上次使用 C 以來已經有一段時間了,我不知道如何讓它在我的情況下作業,因為它this
是不同的。
有人可以幫我嗎?
uj5u.com熱心網友回復:
正確的語法如下所示。請注意,您也可以使用std::function
.
class SpellEffect {
public:
virtual void heal(int magnitude);
};
class SpellArchetype {
public:
//-------------------------------------------vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv---->func is a pointer to a member function of class SpellEffect that has one int parameter and return type of void
virtual void applyToArea(int sizeOfArea, void (SpellEffect::*func)(int));
};
class Spell {
SpellEffect effect;
SpellArchetype archetype;
int sizeOfArea;
int magnitude;
public:
void cast() {
//----------------------------------------vvvvvvvvvvvvvvvvvv---->correct syntax instead of &effect.heal
archetype.applyToArea(sizeOfArea, &SpellEffect::heal);
}
};
在上面的代碼中,void (*func)(int)
我們沒有:
void (SpellEffect::*func)(int)
這意味著它func
是一個指向類的成員函式的指標,SpellEffect
它接受一個int
引數并且回傳型別為void
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/470084.html
標籤:C
上一篇:將位元組大小轉換為無符號整數型別