Non so cosa volessero ascoltare i vostri intervistatori e spero che questo non sia fuori tema ma se intervistassi qualcuno darei dei punti per conoscere i pro ei contro delle strutture esistenti prima di giustificare il lancio del proprio, specialmente a quella scala.
alternative C++ (se si possono usare, grazie alla glglgl per aver ricordato che ti sembra di voler C) sarebbe:
Boost.MSM anche se incredibilmente veloce è fuori questione in quella scala. I motivi sono i tempi di compilazione, mpl :: vector/list e perché si avrebbe un gigantesco file sorgente.
Boost.Statecharts può funzionare con 100 stati ma 100 eventi per stato ridurrebbe al massimo i limiti mpl :: vector/list. Personalmente se avessi 100 eventi in uno stato, proverei comunque a raggrupparli e ad usare reazioni personalizzate, ma ovviamente dipende dall'applicazione.
Non vedo alcuna ragione per cui la macchina a stati di Qt non scala in modo così grande (correggimi se ho torto) ma i suoi ordini di grandezza sono più lenti, quindi non lo uso mai.
L'unica buona C alternativa che conosco è:
QP che è disponibile in C e C++ e può scalare quella grande, ha una buona organizzazione ed è "più di uno stato-macchina" in cui il programma gestisce evento code, concorrenza e gestione della memoria ecc. Il rollover può produrre prestazioni migliori (in base alle tue capacità e al tempo impiegato) ma va notato che la gestione della memoria degli eventi probabilmente finirà per richiedere più ottimizzazione che l'implementazione della macchina statale è autonoma. QP fa questo per te e abbastanza bene.
I puntatori di funzione sembrano l'unico approccio valido in questo caso. Sì, è sovraccarico nella velocità di accesso, ma è una soluzione modulare e flessibile. –
Non riesco a immaginare un hard coding di 100 stati, vorrei piuttosto aggiungerli all'inizializzazione su una macchina a stati. Questo evita la scaletta di if-else/switch-case di 10 schermate e rende * molto * più facile il test e la modifica –
Non sono sicuro se questo soddisferà l'intervistatore, ma sul lavoro vorrei semplicemente usare [Ragel] (http: //www.complang.org/ragel/). Hai una velocità incredibile (per esempio 'goto' based) * e * più facile debugging (Ragel può scaricare il grafico di transizione di stato in formato punto per consumare Graphviz). – unthought