1. ホーム
  2. c++

std::exceptionを継承する正しい方法

2023-08-31 08:55:57

質問

例外階層を作成し、その中に char* を派生クラスのコンストラクタに渡そうとしましたが、どうやら std::exception にはそれを可能にするようなコンストラクタはないようです。というクラスのメンバがあるのに what() というクラスメンバがあり、これは何らかの情報を渡すことができることを示唆しています。

の派生クラスにテキストを渡すにはどうしたらいいのでしょうか? std::exception の派生クラスに情報を渡すために、コードのどこかで言うことができます。

throw My_Exception("Something bad happened.");

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

文字列のコンストラクタを利用したい場合は、以下のように std::runtime_error または std::logic_error のように、文字列のコンストラクタを実装し、std::exception::what メソッドを実装しているものがあります。

それから、継承した新しいクラスからruntime_error/logic_errorコンストラクタを呼び出すだけです。c++11を使用している場合は、コンストラクタ継承を使用できます。