それは、C ++の仮想(純粋)クラスのメンバーで例外を提供することは可能ですか?
-
22-08-2019 - |
質問
もしそうならどのように?
私は、このような
のようにメンバーの例外仕様を提供する方法を知っていますclass SOMEClass
{
public:
void method(void) throw (SOMEException);
virtual void pure_method(void) = 0;
};
method
はSOMEException
をスローしますように。私はSOMEClass
ためSOMEException
スローpure_method
のサブクラスを確認したい場合は、例外指定を追加することが可能です?。このアプローチは実現可能であるか、私はそれを行うことが(ない)ことができる理由を見つけるために、例外と抽象メソッドの詳細を理解する必要があるのですか?
解決
はい、純粋仮想メンバーは、例外仕様を有することができる。
私はあなたがこれを読むことをお勧めします: http://www.gotw.ca/publications/mill22しかし、あまりにも多くの例外仕様に関与取得する前にの.HTMます。
他のヒント
私はそれを試していないもののます。
はい、私はかなり確信して、純粋仮想関数に例外指定を入れています
しかし、ほとんどのC ++の専門家が離れてnothrow仕様から、C ++の例外仕様はかなり役に立たないと彼らは、コンパイラにヒントをしている間、彼らは、例えば、Javaの彼らがしているのと同じように強制されていないことに同意するものとします。
あなたがそれぞれに適切なキャッチオールブロックし、あなたの純粋仮想関数のすべての実装を入れていない限り、あなたは、単にそれだけであなたの例外仕様にリストされた例外をスローすることを保証することはできません。
virtual void action() throw() = 0;
それは可能です。しかし、唯一のスロー()の場合のための合理的。コンパイラはあなたの派生クラス忘れはその「アクション」メソッド宣言の「スロー()」の仕様を追加するたびに警告が表示されます。
所属していません StackOverflow