我正在尝试使用函数指针表来编码 DFA。
该表由指向函数的函数指针填充,以输出某些内容或移动到表中的另一个状态,所有这些都基于机器接收到的输入。
现在我能做的是
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]
或其他任何东西,它会给我返回适当绑定的函数指针?