std::runtime_error
を投げて未処理にすると、端末は自動的にwhat()
の結果を表示し、デバッグを非常に簡単にします。例:未処理のカスタム例外をスローした後にwhat()を呼び出すにはどうすればよいですか?
#include <iostream>
int main()
{
throw std::runtime_error("This is an error message.\n");
}
コンソール出力:このクラスによって派生
カスタム例外クラスが同じ挙動を示し、ゼロから作られた例外クラスは、デフォルトではそれを行うませません。
私が作成したい例外クラスは、std::runtime_error
から派生するものであってはなりません。また、デバッグの目的で、プログラムがクラッシュした後でもwhat()
を印刷する必要があります。誰かが私を助けることができますか?現時点で
#include <iostream>
struct Custom_Exception
{
std::string Msg;
Custom_Exception(std::string Error_Msg) noexcept
{
Msg=Error_Msg;
}
std::string what() noexcept
{
return Msg;
}
};
int main()
{
throw Custom_Exception("This is an error message.\n");
}
コンソール出力:
terminate called after throwing an instance of 'Custom_Exception'
エラーメッセージではありませんwhat():
...デストラクタにstd::cout<<Msg;
を置くことはどちらか助けていません。
ご意見をお寄せください。ありがとうございました。 std::terminate_handler
でwhat()
を使用する
"ただし、作成したい例外クラスは、std :: runtime_errorから派生してはいけません。" - 何故なの? –
メインであなたの例外をキャッチし、それらであなたが望むことをしてください。私はあなたのためにこれを実行するためにランタイムに依存しません。 –
@NeilButterworth私は特定のデータ型を使用するか、毎回変換する必要があります。自分のプロジェクトに使用する汎用例外クラスを作成できないため、この機能を追加する方法を知りたい好奇心。私はちょうどそのようには好きではありません。さもなければ、私はstd :: runtime_errorそれ自体を使うことができます...しかし、それは特定のものstd :: runtime_errorができないので、カスタム例外クラスによって欲しいです。 – Thynome