l 那些本来在用户的异常处理函数中的switch语句,现在移到了my_translator()中。不再是将所有seh异常映射为单个值(如version 1中)或单个类型的对象(version 2),现在的my_translator()将它们映射为多个类型的对象(取决于运行时的实际环境)。
l structured_exception成为了一个基类。我没有让它成为纯虚类,这是跟从了c++标准运行库的引导(std::exception是个实体类)。
l 我没有定义任何析构函数,因为编译器隐含提供的的析构函数对这些简单类足够了。如果我定义了析构函数,它们将需要定义为virtual。
l what()现在返回了一个用户友好的文本,取代了原来的seh异常码。
l 因为我不再测试和显示这些代码,我去掉了数据成员code_。这使得structured_exception对象的大小减小了。(别太高兴:节省的空间又被新增的vptr指针抵销了,因为有了虚函数。)
l 因为模板方式更好,你应该放弃这种继承模式的。我将它留给你作为习题。
试一下新的方案,将main文件改为:
#include <iostream>
using namespace std;
#include "structured_exception.h"
int main()