estoy esperando que alguien me puede ayudar con este problema, o al menos señalar el error de mis caminos ...Boost Statechart - transiciones locales
Como un simple ejemplo de mi problema de tener en cuenta una parte de una aplicación donde puede ingresar al estado de operación "Modo de Funciones". Cuatro submodos están disponibles dependiendo de la tecla de función F1-F4 que el usuario presione. Por defecto, se ingresa el modo F1. El diagrama de estado comienza como sigue:
El usuario puede pulsar F1-F4 en cualquier momento para cambiar al modo correspondiente. La adición de estas transiciones a los estados internos conduce a la siguiente:
Obviamente, esto es (a) un desastre, y (b) una gran cantidad de transiciones de definir. Si en algún momento quiero agregar un F5Mode, entonces ... bueno, ya entiendo la imagen. Para evitar esto me gustaría hacer lo siguiente:
Boost Statechart me permite definir las transiciones de FunctionMode a cualquiera de los estados internos, pero el resultado no es lo que esperaba. El resultado real es la siguiente:
es decir, al presionar F1-F4 para cambiar los modos, se sale del estado de FunctionMode externo y se vuelve a ingresar junto con la activación de las acciones de entrada y salida no deseadas.
Ya en 2006, this thread entre el autor de la biblioteca y un usuario parece describir el mismo problema. Creo que el autor sugiere hacer lo siguiente como una solución temporal:
Sin embargo, esa solución alternativa no parece muy atractivo para mí: Se ha añadido un nivel de estado adicional para ser compilado, el código se ha vuelto menos legible, la historia profunda tendría que usarse para regresar a cualquiera de los subestados de modo de función y el objeto de estado Intermedio se destruye innecesariamente y se construye de nuevo.
Entonces ... ¿dónde me estoy equivocando? O cuales son las alternativas? He echado un vistazo breve a Boost Meta State Machine (msm), pero por lo que he visto hasta ahora, prefiero mucho el aspecto de Statechart.
Me sorprende que más usuarios no hayan enfrentado el mismo problema ... lo que me hace pensar que tal vez mi enfoque sea completamente incorrecto.
Muchas gracias por eso y me disculpo por la demora en responder, parece que no tuve notificaciones por correo electrónico activadas. Desafortunadamente, las reacciones en el estado tienen el mismo problema: llamar a Transit <> desde el estado externo para cambiar el estado interno sigue causando que se salga del estado externo y se vuelva a ingresar. Sin embargo, tu alternativa sugerida parece muy buena para mí, ¡así que gracias por eso! – Grant
@Grant: gracias, y me alegra que te guste :-) –