在我製作的遊戲中,會有觸發器。當觸發器與任何事物碰撞時,會發生某些事情;如果它是門觸發器,則玩家將移動到新的區域。如果它是爆炸觸發器,併發生爆炸。椅子扳機可能會讓玩家坐下。如何獲取一個通用函數指針作爲C++類的私有成員?
我不想爲每個觸發器都劃分子類。每個人都有足夠的重要信息,每個人都可以使用通用界面進行激活。它們之間的唯一區別是在碰撞時調用的例程。
問題是函數本身可能有不同的簽名。
例如,移動播放器功能需要一些東西。
void move_player(Environment *new_env, Player *player, int new_x, int new_y)
但爆炸觸發可能只是
void explode()
我需要一個接受move_player
和explode
類。
這就是我認爲的僞代碼看起來應該像
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文檔。我知道如何使用綁定,我敢肯定它應該在這裏工作,但我沒有如何設置類中的函數指針對參數列表無動於衷。一個最小的工作例子會很棒。
如果您不知道需要什麼參數,您將如何調用它? –
你看過['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)嗎? –
根據你的描述,我最初的想法是,你應該建立一個虛擬的「觸發器」基類,然後研究多態技術來創建新的類,從Trigger繼承它們的屬性。 – tn3rt