1

亲爱的 StackOverflow :)

我正在尝试实现一种模式匹配例程,以特定方式将树结构映射到其他树结构。不幸的是,该例程必须非常灵活,因此该操作非常重要。
我可以直观地将大量工作分成可以按顺序处理的较小部分,但是我很难将结构带入我编写的代码中。这些子任务具有很强的相互依赖性,因此如果我将大功能分解为较小的功能,我需要非常多的状态信息才能将事情做好。这增加了很多额外的代码,使事情难以监督——而且,我担心,可能会减少编译器的优化。
但是,如果我选择将所有内容都实现到一个大函数中,那么“程序流程”就会出现问题-我必须使用很多 goto 语句(我可以将其屏蔽为更漂亮的东西,但问题仍然存在) .

现在总的来说:您如何解决这些“大”问题?你能给我一些关于我可以调查什么的提示吗?

4

1 回答 1

2

回答 C++,但原则应该是可以转移的。

我想说这里的解决方案是意识到 C++ 对象不必对应于“有形”的东西。为什么不将匹配任务表示为一个类而不是一个函数?

基本上,创建一个具有公共“驱动程序”功能的不可复制类。子任务(较小的部分)可以表示为该类的非公共成员函数,并且它们可以通过该类的数据成员共享数据。

像这样的东西:

bool patternsMatch(Pattern a, Pattern b) {
  return PatternMatcher(a, b).match();
}


class PatternMatcher
{
public:
  PatternMatcher(Pattern a, Pattern b);
  bool match() {
    subtask1();
    subtask2();
    return res;
  }
private:
  bool res;
  Pattern a, b;
  int something_subtasks_share;
  float more_shared_data;
  void subtask1();
  void subtask2();
};
于 2013-09-16T11:55:06.900 回答