C++:Указатель на функцию-член класса внутри несвязанной структуры

StackOverflow https://stackoverflow.com/questions/1463150

Вопрос

Я немного почитал в Интернете о том, как это сделать, и я думаю, что делаю это правильно...Моя цель - иметь массив структурных объектов, содержащих указатели на функции-члены класса.

Вот что у меня есть на данный момент...

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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top