Я думаю, что строка, которую вы ищете -
(ent->*(spawn->ptr))();
Давайте разберем это.Во-первых, нам нужно добраться до фактического указателя на функцию-член, который равен
spawn->ptr
Так как здесь spawn
является указателем, и мы должны использовать ->
, чтобы выбрать поле ptr
.
Как только мы это получим, нам нужно использовать оператор выбора указателя на член, чтобы сказать ent
, что нужно выбрать соответствующую функцию-член:
ent->*(spawn->ptr)
Наконец, чтобы вызватьфункция, мы должны сказать C ++, чтобы вызвать эту функцию-член.Из-за проблем с приоритетом операторов в C ++ сначала нужно заключить в скобки все выражение, которое оценивается функцией-членом, поэтому у нас есть
(ent->*(spawn->ptr))();
Для чего это стоит, это одна из самых странных строк кода C ++что я видел через некоторое время.: -)
На совершенно не связанной ноте, поскольку вы используете C ++, я бы не стал использовать typedef struct
.Просто скажите
struct t_dEntitySpawn {
std::string name;
void (dEntity::*ptr)();
};
Надеюсь, это поможет!