1. ホーム
  2. c++

[解決済み] std::exceptionを継承すべきですか?

2022-11-26 21:39:03

質問

少なくともひとつの信頼できる情報源(私が受けたC++のクラス)が、C++のアプリケーション固有の例外クラスは、を継承するべきだと推奨しているのを見たことがあります。 std::exception . 私はこのアプローチの利点について明確ではありません。

C#の場合、継承する理由は ApplicationException を継承する理由は明確です。便利なメソッド、プロパティ、コンストラクタが用意されており、必要なものを追加またはオーバーライドすればよいからです。しかし std::exception では、得られるのは what() メソッドをオーバーライドするだけで、 自分で作ったのと同じようなものです。

では、もしメリットがあるとすれば std::exception をアプリケーション固有の例外クラスの基底クラスとして使用する利点は何でしょうか?を継承しない正当な理由はあるのでしょうか? std::exception ?

どのように解決するのですか?

主な利点は、あなたのクラスを使用するコードが、あなたのクラスがどのようなものであるかを知る必要がないことです。 throw の型を知る必要がなく、ただ catchstd::exception .



編集する。 Martinや他の人が指摘したように、実際には、以下のサブクラスのいずれかを派生させたいのです。 std::exception で宣言されている <stdexcept> ヘッダで宣言されています。