В дополнение к другим ответам, я бы порекомендовал вам создать свой собственный класс исключений, который может содержать более одной части информации. Это должно предпочтительно происходить из std::exception
. Если вы сделаете это стратегией, вы всегда можете поймать свои исключения одним catch(std::exception&)
(полезно, если вы хотите только освободить некоторый ресурс, а затем выбросить исключение - вам не нужно иметь обработчики gazilion для каждого каждый тип исключения, который вы выбрасываете).
Пример:
class MyException : public std::exception {
int x;
const char* y;
public:
MyException(const char* msg, int x_, const char* y_)
: std::exception(msg)
, x(x_)
, y(y_) {
}
int GetX() const { return x; }
const char* GetY() const { return y; }
};
...
try {
throw MyException("Shit just hit the fan...", 1234, "Informational string");
} catch(MyException& ex) {
LogAndShowMessage(ex.what());
DoSomething(ex.GetX(), ex.GetY());
}