我正在尝试实现一个简单的确定性有限自动机。我有automaton
std::vector<transitions*>
。现在,只要收到输入,就应该确定要执行哪个转换。这是我想通过以下功能实现的目标!
现在这是该功能需要做的事情:在向量中搜索唯一转换,两者 cursor->input = inputValue
和 cursor->from = inputFrom
为真,然后返回cursor
(这由emit transitionToExecute(cursor)
完成,不用担心)。
这是我到目前为止所做的。
void automaton::getTransition(int inputValue, state inputFrom){
iterA cursor = find(transitions.begin(), transitions.end(), inputValue);
if(cursor!=transitions.end()){
if(cursor->from.getId() == inputFrom.getId()){
emit transitionToExecute(cursor);
return;
}
}
}
编辑:我已经尝试了链接问题的答案,但我真的不明白它们是如何工作的。有人关心解释吗?这是我尝试过的。我不明白这项技术是如何运作的,所以我很感激一个详细的答案。
struct isCorrectTransition : std::unary_function<transition*, bool> {
// The first variable that must be matched.
int inputValue;
// I want to use this second variable, too! How to do that?
state inputFrom;
// How does the following line work? What does it do?
// How to add in state inputFrom?
isCorrectTransition(int inputValue):inputValue(inputValue){ }
bool operator()(transition* const& inputTransition) const {
return ((inputTransition->getInput() == inputValue) && (inputTransition->getFrom().getId() == inputFrom.getId()));
}
};
void automaton::getTransition(int inputValue, state inputFrom){
searchInput = inputValue;
searchState = inputFrom;
iterA cursor = find_if(transitions.begin(), transitions.end(), isCorrectTransition(inputValue));
if(cursor!=transitions.end()){
emit transitionToExecute(*cursor);
return;
}
}