Вы можете сделать это, используя только необработанные указатели на членов:
typedef void (Z::*_a_ptr_to_some_member)(State s);
_a_ptr_to_some_member _p;
...
_p = &Z::UpdateGuiForStopState;
...
(this->*_p)(s);
Это немного старая школа в наши дни, и синтаксис немного сложный, но он должен работать.(Предостережение: я не пробовал.)
Первый бит определяет правильный тип указателя на функцию-член и объявляет переменную-член этого типа.
Второй бит инициализирует _p, чтобы указать на правильную функцию (вы не можете сократить это, это необходимый синтаксис).
Третий бит вызывает функцию-член, на которую указывает _p;для этого вам нужно предоставить экземпляр Z - в данном случае тот, на который указывает это.Я думаю, что дополнительные скобки необходимы;приоритет оператора немного странный.
TBH Я бы, вероятно, использовал для этого связывание (из boost, tr1 или C ++ 11);это немного медленнее, но проще и гибче.