State
соответствует указателю на функцию.
К сожалению, вы не предоставили определение для initial
в своем коде. Так что это небольшая догадка. Но в аргументе вашего конструктора (State)&Machine::initial
вы, похоже, предполагаете, что это статическая функция-член.
Это компилируется без ошибок и предупреждений:
class Machine : public Fsm
{
static void initial(); // make sure it's static
public:
Machine() : Fsm((State)&Machine::initial) {} // ctor
};
Теперь, если вы хотите указатель на функцию-членЭто другая история. Во-первых, вам нужно определить State
соответственно:
typedef void (Fsm::*State)();
Затем dispatch
должен вызвать функцию-член:
void Fsm::dispatch()
{
(this->*state__)() ;
}
Единственная проблема может заключаться в том, что вы вызываетепроизводный указатель на функцию-член, используя базовый указатель на функцию-член. К счастью, это гарантированно сработает, как объяснено в этом превосходном ответе .