case exception_access_violation:
// ...
case exception_int_divide_by_zero:
// ...
case exception_stack_overflow:
// ...
// ...
}
这样的查询需要windows.h中的信息,以知道最初的seh异常码的含意。这样的需求违背了structured_exception的抽象原则。此外,switch语句也经常违背了多态的原则。从用户代码的角度看,你通常应该用继承和模板来实现它。
c++标准运行库在这方面提供了一些指导。如我在part3中勾画的,头文件<stdexcept>定义了一个异常类层次,std::exception是根结点。这个根类定义了虚成员what(),它返回一个编译器自定义的ntbs(c++标准中是“以null结束的字符串”)。每个继承类指定自己的what()的返回值。虽然c++标准没有规定这些值的内容,但我相信标准委员会打算用这个字符串来描述异常的类型或含意的。
根据这种精神,standard_exception的申明是:
#if !defined inc_structured_exception_
#define inc_structured_exception_
#include "eh.h"
#include "windows.h"
class structured_exception