次のようなコードがあります。
class ParseError: public exception {
protected:
mutable string msg;
int position;
public:
explicit ParseError(const string& message, const int index) {
msg = message;
position = index;
}
virtual ~ParseError() throw () {
}
const char * what() const throw () {
stringstream ss(msg);
ss << "Parse error at position " << position << ": " << msg;
msg = ss.str();
return msg.c_str();
}
};
それをスローすると、valgrind で単体テストを実行すると、次のように表示されます。
foo.h:102: メッセージの予期しない例外: 「位置 9 でエラーを解析: 予期しない文字が見つかりました: 何とか」
これは私が望んでいることですが、exception
基本クラスが舞台裏で何をしているのかに興味がありました。拡張せずexception
に残りのクラスをそのままにしておくと、次のようになります。
foo.h:102: メッセージ付きの予期しない例外: '不明な例外'
exception
拡張せずにメッセージを表示するには、クラスに何を追加する必要がありますか?
ところで、私はruntime_error
おそらくexception
. この場合、何がexception
舞台裏で動いているのか興味がありますが、必ずしもベスト プラクティスに関するアドバイスを求めているわけではありません。