如果是这样的话?
我知道如何为
等成员提供例外规范class SOMEClass
{
public:
void method(void) throw (SOMEException);
virtual void pure_method(void) = 0;
};
这样method
只会引发SOMEException
。如果我想确保SOMEClass
的子类为SOMEException
抛出pure_method
,是否可以添加异常规范?这种方法是否可行,或者我是否需要更多地了解异常和抽象方法,以找出可以(不)完成的原因?
答案 0 :(得分:6)
是的,纯虚拟成员可以有异常规范。
我建议您先阅读此内容:http://www.gotw.ca/publications/mill22.htm,然后才能过多地参与异常规范。
答案 1 :(得分:0)
virtual void action() throw() = 0;
有可能。但只适用于throw()案例。每次派生类忘记时,编译器都会发出警告,在其“action”方法声明中添加“throw()”规范。
答案 2 :(得分:0)
是的,我很确定在纯虚函数上添加了一个异常规范,尽管我还没有尝试过。
但是,大多数C ++专家都认为,除了nothrow规范之外,C ++异常规范是相当无用的,虽然它们是编译器的提示,但它们的实现方式与它们不同,例如Java。 / p>
除非将适当的catch-all块放入纯虚函数的每个实现中,否则您无法保证它只会抛出异常规范中列出的异常。