首页 > 解决方案 > C ++ QT终止到父级

问题描述

我正在寻找一种很好的方法来停止运行不同类方法的指令(例如,从管理器调用)并在这些类方法出现错误的情况下返回管理器。

我建立的是一个由 组成的结构manager class,它运行不同的方法workers classes,这些工人类有时有自己的workers,工人的工人可以有自己的工人(典型的树结构,但我称他们为工人是有道理的)等。

所以假设我们有这种类型的结构,每个类将他们的部分工作委托给不同的类,同时也自己做一些事情。所有工作人员都在工作,比如说Message带有字段的结构texterror如果发生错误,他们必须报告它是什么类型的错误,并在可能的情况下提供此错误的文本解释。(在成功的情况下,错误是NO_ERROR并且文本中充满了他们所做的工作)

Manager->WorkerA->Worker_B->WorkerC->WorkerD

因此,如果 WorkerD 出现错误,这将阻止所有主管完成他们的工作,我们将不得不:

  1. 检查 WorkerD 中的错误 - 有错误!
  2. 更改message.error为,NO_ERROR必要时ERROR更改message.text
  3. Return message//这里开始我想以某种方式省略的部分:
  4. WorkerC 必须在 WorkerD 完成后检查,如果有错误,如果有,立即返回(workerC 不应该继续他的工作)
  5. WorkerB 必须在 WorkerC 完成后检查,如果有错误,如果有,立即返回(workerB 不应该继续他的工作)
  6. WorkerA 必须在 WorkerC 完成后检查,如果有错误,如果有,立即返回(workerA 不应该继续他的工作)
  7. 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;

标签: c++qtexceptiondesign-patternsdesign-principles

解决方案


推荐阅读