gpt4 book ai didi

c++ - 当子任务具有很强的相互依赖性时,如何构建一个大例程

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:54 25 4
gpt4 key购买 nike

亲爱的 StackOverflow :)

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

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

最佳答案

针对 C++ 的回答,但原则应该是可移植的。

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

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

像这样:

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();
};

关于c++ - 当子任务具有很强的相互依赖性时,如何构建一个大例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18827135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com