C++:Указатель на функцию-член класса внутри несвязанной структуры
-
13-09-2019 - |
Вопрос
Я немного почитал в Интернете о том, как это сделать, и я думаю, что делаю это правильно...Моя цель - иметь массив структурных объектов, содержащих указатели на функции-члены класса.
Вот что у меня есть на данный момент...
typedef void (foo::*HandlerPtr)(...);
class foo
{
public:
void someFunc(...);
// ...
private:
// ...
};
struct STRUCT
{
HandlerPtr handler;
};
STRUCT stuff[]
{
{&foo::someFunc}
};
Затем при вызове функции с использованием (stuff[0].*handler)(), с аргументами или без них (я действительно намерен использовать списки аргументов), я получаю "handler":Необъявленный идентификатор...
Должно быть, я чего-то не понимаю, только не знаю, чего.
Решение
someFunc() не является статическим методом, поэтому вам нужен экземпляр объекта foo, чтобы вызвать someFunc() через переменную указателя на метод, т. Е.:
foo f;
f.*(stuff[0].handler)();
Или:
foo f;
HandlerPtr mthd = stuff[0].handler;
f.*mthd();
Или, используя указатели:
foo *f = new foo;
f->*(stuff[0].handler)();
delete f;
Или:
foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;
Не связан с StackOverflow