Я пытаюсь написать очень минимальный конечный автомат в C++. Я бы хотел, чтобы состояния были методами класса машины, и каждое состояние при запуске должно возвращать новое состояние для перехода. Естественно, я использую несколько typedef, чтобы помочь.Тип функции, которая возвращает себя
template <typename C, typename E>
using State = State<C, E> (C::*)(Stream<E>&);
Состояние должно быть функцию-член класса (в C
), который принимает объект потока и дает новое состояние. Я получаю следующую ошибку.
fsm.hpp:8:15: error: ‘State’ does not name a type
using State = State<C, E> (C::*)(Stream<E>&);
Очевидно, что State
пока не объявлена на линии, которая должна объявить State
. Насколько я знаю, нет способа «переслать объявление» typedef, так что это подходящий способ объявить это имя?
'State' соответствует только функции (ну, метод) типа. Сам государственный автомат является '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. Мне не нужны отдельные экземпляры классов для каждого состояния; Мне просто нужны функции. –
Чтобы уточнить, я хочу, чтобы 'State' был методом, который принимает аргумент, а затем возвращает новое 'State ', которое само является методом, а не экземпляром класса. –
Понятно, я неправильно понял ваш код. –