Я делаю небольшую игру на C++, и я обнаруживаю указатели на функции класса. У меня нет никакой идеи, чтобы они работали правильно, но вот моя попытка.C++ Member Function Pointer
// 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/how-to-invoke-pointer-to-member-function-when-its-a-class-data-member) – iammilind
Я настоятельно рекомендую вам использовать хороший стиль именования, чтобы другой мог легко понять вы код –