Burada bir geçiş tablo olarak bir std::tr1::tuple
kullanan bir jenerik devlet makinesinin özel bir uygulama vardır:Boost :: fusion :: vektör çalışma zamanında nasıl bulunur?
template<State StartState, Event TriggerEvent, State TargetState>
struct transition {...};
typedef std::tr1::tuple< transition< ready , run , running >
, transition< running , terminate, terminating >
, transition< terminating, finish , terminated >
> transition_table;
bir fonksiyonu
template<typename Transitions>
State find_next_state(State current
, Event event
, const Transitions& transition_table);
belirli bir geçiş tablosundaki sonraki halini bulmak için var mevcut durum ve bir olay.
Tüm bu işlemler, 10'dan fazla öğeyi desteklemeyen bu platformun tuple
uygulaması dışında geçerlidir. Aynı durum boost::tuple
için geçerli gibi görünüyor, bu yüzden bunun yerine boost::fusion::vector
çalıştırmaya çalışıyorum. Ancak fusion's find_if
'un sadece bir "MPL Lambda Expression" aldığını sanıyorum - ki bu sadece derleme zamanında çalışıyor.
Yukarıdakiler göz önüne alındığında, find_next_state()
'u nasıl uygularım?
Not: Sadece GCC 4.1.2 besler, bu yüzden C++ 03 + TR1 ile sıkışmış
Bu özel bir gömülü platformu.
Alternatif bir workarond olarak, belki de tuplleri tupllere paketleyebilirsiniz? – Angew
Çalışma zamanında füzyon dizisi ve işleviyle birlikte çalışacak olan kendi 'find_if 'yazınız nasıl olur? – ForEveR
Neden ilk başta 'tuple' kullanıyorsunuz? 'Geçiş' herhangi bir devlet var mı? Eğer olmazsa, çalışma zamanında yinelemek için 'mpl :: vector' ve' mpl :: for_each' kullanabilirsiniz. – Abyx