C ++: Ponteiro a função de membro de classe dentro de uma estrutura não-relacionada
-
13-09-2019 - |
Pergunta
Eu fiz um pouco de leitura on-line a respeito de como ir sobre isso e eu acho que eu estou fazendo isso corretamente ... Meu objetivo é ter uma matriz de objetos de estrutura que contêm ponteiros aos Estados-funções de um classe.
Aqui está o que eu tenho até agora ...
typedef void (foo::*HandlerPtr)(...);
class foo
{
public:
void someFunc(...);
// ...
private:
// ...
};
struct STRUCT
{
HandlerPtr handler;
};
STRUCT stuff[]
{
{&foo::someFunc}
};
Em seguida, ao chamar a função usando (. Coisas [0] * manipulador) (), com ou sem argumentos (eu realmente pretende listas de argumentos de uso), eu recebo "manipulador": não declarado identificador ...
Eu tenho que estar faltando alguma coisa, só não sei o quê.
Solução
somefunc () não é um método estático, então você precisa de uma instância foo objeto, a fim de chamar somefunc () através do seu variável de ponteiro-to-método, isto é:
foo f;
f.*(stuff[0].handler)();
Ou:
foo f;
HandlerPtr mthd = stuff[0].handler;
f.*mthd();
Ou, usando ponteiros:
foo *f = new foo;
f->*(stuff[0].handler)();
delete f;
Ou:
foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;