私はC++で少しゲームをしています。クラスメンバ関数のポインタを発見しています。 私はそれらを正しい方法で動作させる考えはありませんが、私の試みです。C++メンバ関数ポインタ
// A struct where the function pointer will be stored for the call
// By the way, is there a way to do the same thing with classes ?
// or are structs still fine in C++ ? (Feels like using char instead of string)
typedef struct s_dEntitySpawn
{
std::string name;
void (dEntity::*ptr)();
} t_dEntitySpawn;
// Filling the struct, if the entity's classname is "actor_basicnpc",
// then I would like to do a call like ent->spawnBasicNPC
t_dEntitySpawn dEntitySpawns[] = {
{ "actor_basicnpc", &dEntity::spawnBasicNPC },
{ 0, 0 }
};
// This is where each entity is analyzed
// and where I call the function pointer
void dEntitiesManager::spawnEntities()
{
dEntity *ent;
t_dEntitySpawn *spawn;
[...]
// It makes an error here, feels very weird for me
if (!spawn->name.compare(ent->getClassname()))
ent->*spawn.ptr();
[...]
}
私はそれらを実装する正しい方法について教えてください。
よろしくお願いいたします。
代わりにインターフェイスを使用してください。つまり仮想メソッドを持つ基本クラスを作成し、そのメソッドの適切な実装でさまざまなクラスを作成します。コードを読みやすくし、必要に応じて動作させます。 –
[クラスデータメンバのときにメンバ関数へのポインタを呼び出す方法は?](http:// stackoverflow。com/questions/6316751/invoke-pointer-to-member-function-when-a-class-data-member) – iammilind
他の人が簡単に理解できるように、良い命名スタイルを使用することを強くお勧めしますあなたは正しい答えを –