私はそうのように、文字列(std::string
またはconst char*
のいずれかを)投げ経由してエラーを処理するC++でプログラムを書いています:スローされた式をあるキャッチブロックから別のキャッチブロックに転送する方法は?
if (/* failure condition 1 */)
throw std::string("Error 1 : ...") + std::to_string(foo);
if (/* failure condition 2 */)
throw "Error 2 : ...";
その後、私は彼らにこの方法をキャッチします:
try {
thisIsLikelyToThrowErrors();
} catch (const std::string& e) {
std::cerr << ":(" << e << std::endl;
} catch (const char* e) {
std::cerr << ":(" << e << std::endl;
}
私は希望最初のcatch
ブロックから2番目のブロックに文字列を転送することにより、同じ行を2回書くのを避けるには、
try {
thisIsLikelyToThrowErrors();
} catch (const std::string& e) {
throw e.c_str(); // Does not work
} catch (const char* e) {
std::cerr << ":(" << e << std::endl;
}
しかし、このコードは機能しません。スローされたchar const*
は単に捕まえられません。
これを行う方法はありますか?
感謝:)
"例外の最後に残っているアクティブなハンドラが再スローされた以外の方法で終了すると、オブジェクトが破棄されます。" < - 外部ハンドラが 'const char *'をキャッチする前に文字列が削除されます。 – Barry
@バリー:合意。 –