我有一个方法:
void doSomethingMain(char* s)
{
doSomethingElse(s);
doMoreStuff(s);
}
doSomethingElse()
方法如下:
void doSomethingElse(char* s)
{
anotherMethod(s);
moreStuff(s);
}
其中 anotherMethod()
和 moreStuff()
调用其他方法,轮到它们可能返回到 doSomethingElse()
或 moreStuff()
或其他方法...以非常递归的方式,但它们都不调用主要的 doSomethingMain()
方法。这是一个有限递归,它会在 s
被成功消费时结束。这些方法是无效的,我们不能不付出巨大的努力就改变它。
所有这些方法都使用参数 s
并检查 s
中的错误。我想要发生的事情如下:当调用堆栈下方某处的方法之一在其输入参数 (s
) 中遇到错误时,我想立即中止发现错误的函数的执行, 然后跳回到 doSomethingMain()
中的 doMoreStuff()
。
显然,C++
方法的直接解决方案之一是 throw
和 catch()
对,并且来自 C
方法是 setjmp
和 longjmp
对...但是我们的单元测试框架不喜欢 throw
... catch
对(它将它们解释为错误)并且我想避免使用 longjmp
方法,所以这里是问题:
为了在方法中中断应用程序的执行流程并在特定位置(方法之后的下一条语句)继续,我们还有哪些其他选择?
最佳答案
您可以更改方法以返回 bool
。如果解析成功,则在递归结束时,返回 true
并将其传递给调用函数。如果在任何一点解析被证明不成功,返回false
,并在调用函数中测试整个递归的返回值。
However our unit testing framework does not like the throw ... catch pairs (it interprets them as errors, and no more tests are executed after them)
更改您的测试单元框架。
关于c++ - 如何强制中断方法的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212962/