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ê.

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top