1
我試圖使用函數指針表編碼DFA。C++函數指針向量的初始化列表11
該表由函數指針填充,以便輸出某些東西或移動到表中的另一個狀態,全部基於該機器接收的輸入。
現在我所能做的就是
function<token*()> A1 = bind(A, &data);
function<token*()> A2 = bind(B, &data);
function<token*()> S1 = bind(S, 1);
function<token*()> S2 = bind(S, 2);
vector< function<token*()> > _table = { A1, A2, S1, S2 };
爲了使一個2x2的 「表」,[0] [0]執行行動A1,[0] [1]執行動作A2,[1] [ 0]確實轉移到第1行,[1] [1]轉移到第2行...等等。
我的問題是,在c + + 11,有沒有更快的方法來做到這一點?我的狀態表已經增長到60x150,我有50個不同的動作都綁定到不同的功能,我必須定義一個移位函數來到每一行。
我想在C++ 11的初始化功能中完成所有工作,所以它是在編譯時而不是在運行時完成的。
是否有可能創建一個宏或一些執行類似:
vector<function<token*()> > S;
for(int i = 0; i < 60; i++){
function<token*()> S[i] = bind(S, i);
}
,這樣之後,我可以引用S[3]
或什麼,這讓我回了適當的約束函數指針?
你有沒有考慮升壓元狀態機器在http://www.boost.org/doc/libs/1_53_0/libs/msm/doc/HTML/index.html – 2013-03-07 21:47:35
我從來沒有聽說過。我將在今晚晚些時候看看它。謝謝你的鏈接! – Veaviticus 2013-03-07 22:21:20
「更快」是什麼意思?更快寫入?更快執行?另外,只要你使用'std :: function',你就不能在編譯時進行初始化。 – bames53 2013-03-07 22:39:48