Обычно не нужно знать, что идентификаторы генерируются для всех состояний машины состояния, если только для целей отладки, как функция состояния делает в учебниках, чтобы отображать имя текущего состояния. В этом разделе будет показано, как автоматически отображать имена, генерируемые шрифтом, но они не очень читаемы на всех платформах, поэтому он может помочь узнать, как генерируются идентификаторы. Идентификаторы генерируются с использованием таблицы перехода от “Start” столбца вверх донизу, затем от “Next” столбца вниз, как показано на следующем изображении:

Stopped получит id 0, Open id 1, ErrorMode id 6 и SleepMode (видны только в “Next” столбец) id 7. Если у вас есть некоторые неявно созданные состояния, такие как начальные состояния без перехода или состояния, созданные с использованием явного_creation typedef, они будут добавлены в качестве источника в конце таблицы перехода. Если у вас есть состояния подмашины, в конце таблицы будет добавлена строка после автоматически или явно созданных состояний, которые могут изменить их идентификатор. Следующая помощь, которая вам понадобится для отладки, будет называть текущий метод состояния класса state_machine, а затем помощник типа display_type для создания читаемого имени из идентификатора. Если вы не хотите проходить через таблицу перехода для заполнения массива имен, библиотека предоставляет другого помощника, заполните_state_names, который, учитывая массив достаточного размера (см. следующий раздел, чтобы узнать, сколько состояний определено в машине состояний), заполнит его сгенерированными шрифтом именами.