c++ - C ++ QT终止到父级
问题描述
我正在寻找一种很好的方法来停止运行不同类方法的指令(例如,从管理器调用)并在这些类方法出现错误的情况下返回管理器。
我建立的是一个由 组成的结构manager class
,它运行不同的方法workers classes
,这些工人类有时有自己的workers
,工人的工人可以有自己的工人(典型的树结构,但我称他们为工人是有道理的)等。
所以假设我们有这种类型的结构,每个类将他们的部分工作委托给不同的类,同时也自己做一些事情。所有工作人员都在工作,比如说Message
带有字段的结构text
,error
如果发生错误,他们必须报告它是什么类型的错误,并在可能的情况下提供此错误的文本解释。(在成功的情况下,错误是NO_ERROR
并且文本中充满了他们所做的工作)
Manager->WorkerA->Worker_B->WorkerC->WorkerD
因此,如果 WorkerD 出现错误,这将阻止所有主管完成他们的工作,我们将不得不:
- 检查 WorkerD 中的错误 - 有错误!
- 更改
message.error
为,NO_ERROR
必要时ERROR
更改message.text
- Return
message
//这里开始我想以某种方式省略的部分: - WorkerC 必须在 WorkerD 完成后检查,如果有错误,如果有,立即返回(workerC 不应该继续他的工作)
- WorkerB 必须在 WorkerC 完成后检查,如果有错误,如果有,立即返回(workerB 不应该继续他的工作)
- WorkerA 必须在 WorkerC 完成后检查,如果有错误,如果有,立即返回(workerA 不应该继续他的工作)
- Manager 在 WorkerA 完成后检查错误。如果没有错误,他会做一些额外的工作,如果有 - 他只是进一步传递带有文本和错误的消息。
我正在寻找一种更简单的方法来省略步骤 4-6,因此一旦任何工作人员作业中出现错误,他就会完成错误和文本,并通过所有中间方法将此消息返回给经理。类似返回的东西,但也返回父函数。
我知道它可以用异常来完成,但是有没有办法不用异常来做,并且仍然减少不断添加'do func1(),如果有错误,停止工作并返回这个错误'的需要?
示例伪代码:
manager, worker1, worker2
manager.work{
//do something
switch(delegate_to) {
case worker:
message=worker1.work
case accountant:
message=accountant1.work
case differentworker:
message=differentworker.work
}
if(message.error=NO_ERROR)
all_ok
else
not_all_ok
}
worker1.work
{
message=do_something()
if(message.error) //this is what I am trying to omit
return message;
//some work
message=worker2.work
if(message.error) //this is what I am trying to omit
return message;
//some work
return message;
}
还有我的程序的一部分(我正在寻找一个跳过这个的解决方案,因为我在多层上有这种类型的指令)
// lots of code
out << getOperators(controlList[2], &msg);
if(msg.error!="") return msg;
out << getProductDetails(controlList[3], &msg);
if(msg.error!="") return msg;
//lots of code
return msg;
解决方案
推荐阅读
- bash - 如何在 if 语句中使用 wc -l 整数输出
- php - WordPress帖子上传时间问题
- javascript - 两个文本区域并排,最大尺寸填充整个覆盖网站,就像在崇高的文本编辑器中一样,有两列布局?
- java - 如果错误生成一次,Java while 循环会继续执行 catch 块中的代码
- android - 编辑填写的表格并使用 Ionic/Angular 重新提交
- linux - 收到 27 Profiling timer expired 信号;分析时间警报 gprof
- c++ - C++ 整数类型
- reactjs - 如何在 React PWA 中读写 RFID 标签
- python - 无法对 tkinter 使用 .place 命令
- python - Pycharm中调试Django项目(Dev分支)的问题