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