2009-03-26 6 views
1

もしそうなら?C++仮想(純粋な)クラスメンバで例外を提供することは可能ですか?

私はmethodだけSOMEExceptionを投げるようにするため、このような

class SOMEClass 
{ 
public: 


    void method(void) throw (SOMEException); 

    virtual void pure_method(void) = 0; 
}; 

としてメンバーの例外仕様を提供する方法を知っています。 SOMEClassのサブクラスがpure_methodの場合SOMEExceptionとなるようにするには、例外仕様を追加できますか?このアプローチは実現可能か、例外(例外)と抽象メソッドの詳細を理解して、それができない理由を調べる必要がありますか?

答えて

6

はい、純粋な仮想メンバーは例外仕様を持つことができます。

私はこれを読むことをお勧めします:http://www.gotw.ca/publications/mill22.htmしかし、あまりにも多くの例外仕様に関与する前に。

+0

お返事いただきありがとうございます。私は、特に私たちのプロジェクトで必要とされるように、例外を完全に使い始めるのは良い考えではないかもしれないと思っていました。私はブーストの例外も探検します – dubnde

0
virtual void action() throw() = 0; 

可能です。しかし、throw()の場合だけ合理的です。コンパイラは、派生クラスの忘れが "アクション"メソッド宣言に "throw()"仕様を追加するたびに警告します。

0

はい、私はそれを試したことはありませんが、純粋な仮想関数に例外の仕様を置くことは間違いありません。

しかし、ほとんどのC++エキスパートは、非明示的な仕様とは別に、C++の例外仕様はかなり役に立たず、コンパイラへのヒントではあるが、例えばJavaのように強制されないことに同意する。

純粋仮想関数のすべての実装に適切なキャッチオールブロックを設定しない限り、例外仕様にリストされている例外のみをスローすることは保証できません。

+0

"彼らはJavaのように強制されません。" Javaでは実行されないので、これはいいことです。 – curiousguy

関連する問題