Ich hoffe, dass mir jemand bei diesem Problem helfen kann, oder zumindest die wegen meiner Fehler hinweisen ...Boost-Statechart - Lokale Übergänge
Als einfache Darstellung meines Problems betrachten einen Teil eine Anwendung, in der Sie einen Betriebszustand "Funktionsmodus" eingeben können. Je nachdem, welche Funktionstaste F1-F4 der Benutzer drückt, stehen dann vier Untermodi zur Verfügung. Standardmäßig ist der F1-Modus aktiviert. Das Zustandsdiagramm beginnt wie folgt:
Der Benutzer F1-F4 zu jeder Zeit zu dem entsprechenden Modus schalten drücken. Addiert man diese Übergänge zu den inneren Zuständen führt zu folgendem:
Offensichtlich ist dies (a) ein Durcheinander, und (b) eine Menge von Übergängen zu definieren. Wenn ich irgendwann einen F5Mode hinzufügen möchte, dann ... nun, du bekommst das Bild. Um dies zu vermeiden Ich möchte folgendes tun:
Boost-Statechart ermöglicht es mir, von FunctionMode einem der inneren Zustände Übergänge zu definieren, aber das Ergebnis ist nicht das, was ich erwartet hatte. Das tatsächliche Ergebnis ist wie folgt:
D.h. Drücken von F1-F4 zum Umschalten zwischen den Modi bewirkt, dass der äußere FunctionMode-Status verlassen und erneut eingegeben wird, während die unerwünschten Exit- und Entry-Aktionen ausgelöst werden.
Weg zurück in 2006, this thread zwischen dem Bibliotheksautor und einem Benutzer scheint das gleiche Problem zu beschreiben. Ich denke, dass der Autor die folgenden als Behelfslösung schlägt tun:
jedoch, dass Behelfslösung nicht sehr attraktiv für mich scheint: Es hat eine zusätzliche staatliche Ebene hinzugefügt werden zusammengestellt, der Code ist weniger lesbar geworden, deep-history müsste verwendet werden, um zu irgendeinem der Funktionsmodus-Unterzustände zurückzukehren, und das Zwischenzustandsobjekt wird unnötigerweise zerstört und erneut aufgebaut.
Also ... wo liege ich falsch? Oder was sind die Alternativen? Ich habe einen kurzen Blick auf Boost Meta State Machine (msm) geworfen, aber von dem, was ich bisher gesehen habe, bevorzuge ich das Aussehen von Statechart.
Ich bin überrascht, dass mehr Benutzer nicht das gleiche Problem konfrontiert haben ... was mich denken lässt, dass mein Ansatz möglicherweise völlig falsch ist!
Vielen Dank dafür und Entschuldigung für die Verzögerung bei der Antwort, es sieht so aus, als hätte ich keine E-Mail-Benachrichtigungen aktiviert. Unglücklicherweise haben In-State-Reaktionen das gleiche Problem - das Aufrufen von Transit <> aus dem äußeren Zustand, um den inneren Zustand zu ändern, bewirkt immer noch, dass der äußere Zustand verlassen und erneut betreten wird. Wie auch immer, die vorgeschlagene Alternative sieht für mich ziemlich gut aus, also danke dafür! – Grant
@Grant: danke, und ich bin froh, dass es dir gefällt :-) –