目前,我有這樣的代碼前面加上一個「標籤」來,給了我一個堆棧跟蹤的一個很輕的版本異常消息:前面加上一個字符串到另一個字符串
try {
doSomething();
} catch (std::exception& e) {
int size = 8 + _tcslen(e.what());
TCHAR* error = new TCHAR[size];
_sntprintf(error, size, TEXT("myTag: %s"), e.what());
std::exception x = std::exception(error);
delete []error;
throw x;
}
它只是看起來可怕的,我確定必須有一個簡單的方法來完成這一點。你能幫我解決這個問題嗎?
您已經得到了字符串處理問題的答案,但我不得不說您的異常處理看起來相當可疑。你已經發現了一個異常'e',它可以是從std :: exception派生的任何類,但是你有效地切割e並丟失真正的e類型。 – 2009-10-11 12:46:07
感謝您的評論。我沒有想過它,因爲我只在內部函數中拋出std :: exception。不過,我現在明白你的意思了。什麼是替代方案?直接更改內部what()文本並拋出原始異常? – Etan 2009-10-11 13:11:32
*您*只能顯式拋出std :: exceptions,但STL也可以拋出。如果您只想處理自己的異常,請考慮編寫自己的異常類,以便在其中修改字符串? – 2009-10-11 14:13:56