gpt4 book ai didi

c++ - Ogre 对异常的使用是使用它们的好方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:19 25 4
gpt4 key购买 nike

到目前为止,我已经设法完成了我的 C++ 游戏编程生涯,几乎从未接触过异常,但最近我一直在使用 Ogre 引擎开发一个项目,并且我正在努力学习。我在这里发现了很多关于 C++ 异常的一般用法的很好的问题和答案,但我想从这里得到一些关于 Ogre 的用法是否良好以及如何最好地使用它们的外部意见。

首先,引用 Ogre 自己的异常类的文档:

OGRE never uses return values to indicate errors. Instead, if an error occurs, an exception is thrown, and this is the object that encapsulates the detail of the problem. The application using OGRE should always ensure that the exceptions are caught, so all OGRE engine functions should occur within a try{} catch(Ogre::Exception& e) {} block.

真的吗?每个单独的 Ogre 函数都可以抛出异常并包装在 try/catch block 中?目前,这是在我们的使用中通过 main 中的 try/catch 处理的,它将在退出前显示一个带有异常描述的消息框。这对于调试来说可能有点尴尬,因为你没有得到堆栈跟踪,只有抛出错误的函数——更重要的是我们代码中调用 Ogre 函数的函数。如果它是 Ogre 代码中的断言,那么它将直接进入调试器中的代码,我将能够更容易地找出发生了什么——我不知道我是否遗漏了一些可以让我已经调试异常了吗?

我现在开始在我们的代码中添加更多的 try/catch block ,通常考虑如果 Ogre 函数抛出异常是否重要。如果它会停止一切工作,那么让主要的 try/catch 处理它并退出程序。如果它不是很重要,那么在函数调用之后立即捕获它并让程序继续。最近的一个例子是为应用于实体的 Material 构建顶点/片段程序参数的 vector ——如果 Material 没有任何参数,那么它会抛出一个异常,我捕捉到然后忽略它,因为它没有。不需要添加到我的参数列表中。这看起来是一种合理的处理方式吗?非常感谢任何关于使用 Ogre 的具体建议。

最佳答案

您不需要在 try { ... } catch 中包装对 Ogre 的每个最后调用。只要可以有意义地处理异常,就可以这样做。在某些情况下,这可能是在单个调用站点,也可能是在某种高级循环中。如果你在任何地方都不能有意义地处理它,那就根本不要捕获它;让调试器接管。

特别是,您不应该因为您引用的原因而在 main() 中捕获异常(至少,在开发期间不应该;您应该在生产中)。

关于c++ - Ogre 对异常的使用是使用它们的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736828/

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