C++原本的异常系统是这个样子的: 调用what()方法时只返回异常的名称,并没有显示抛出异常的位置和堆栈跟踪,功能上显得少许的贫瘠... 下面这个是我自己实现的改良版的异常处理系
C++原本的异常系统是这个样子的: 调用what()方法时只返回异常的名称,并没有显示抛出异常的位置和堆栈跟踪,功能上显得少许的贫瘠... 下面这个是我自己实现的改良版的异常处理系统: 可以看到详细的信息,下面是实现过程。
一、模拟栈展开的过程网上看到别人用一些很奇怪的方法来获取堆栈信息,从而实现堆栈跟踪。 个人觉得很费劲,而且还要安装第三方库。 于是我们可以写一个类来模拟这个过程。 定义一个叫做ExceptionStackTrace的类:
既然是模拟,所以需要在程序最前面定义一个静态的对象,使用时在每一个函数的开始和结束部分加上这两句:
当调用方法时,会在调用ExceptionStackTrace的push方法,将方法信息压栈。 之后再执行方法内部的语句。 最后在将方法出栈,模拟方法已被调用完毕。 下面是实现代码:
二、新异常处理系统中异常的定义异常包括信息和异常名称,同时还需要支持自定义异常。 所以我们可以搞一个用于新异常系统的父类异常,自定义的异常全部继承这个类即可。 父类的名字叫SuperException,下面是类结构:
然后是实现部分:
具体用法:
当输入128时:
三、超级运用
结果: 为一的遗憾就是没法加上行号文件等提示信息,如果能够实现的话,我将会在下一篇博客中提及。 |
2022-05-14
2021-11-29
2022-04-04
2022-06-24
2021-11-25