Здравствуйте, Xchllataa, Вы писали:
Для удобства в формировании сообщений при генерации исключений, написал следующий код
X>#include <iostream>
X>#include <sstream>
X>#include <stdexcept>
X>class Throw
X>{
X>public:
X> Throw()
X> {
X> }
X> ~Throw()
X> {
X> // Здесь предполагается выводить stream.str() в лог
X> // C4722 'Throw::~Throw' : destructor never returns, potential memory leak
X> throw std::runtime_error(stream.str());
X> }
X> operator std::ostream&() {return stream;}
X>private:
X> std::ostringstream stream;
X> Throw(Throw const&);
X> Throw const& operator=(Throw const&);
X>};
X>// suppress C4127
X>inline bool false_() {return false;}
X>#define DBG_THROW() if (false_()) ; else static_cast<std::ostream&>(Throw()) << '[' << __FUNCTION__ << "] "
int foo(int bar)
{
if(bar == 0xdeadbeef)
DBG_THROW() << "Oops...";
return 42;
}
int main()
{
try
{
DBG_THROW() << "test " << foo(0xdeadbeef);
}
catch (std::exception const& e)
{
std::cout << e.what() << std::endl;
}
}
X>Я знаю, что если Throw::~Throw() был вызван в результате другого исключение, то приложение упадёт, но здесь это вроде не проблема
Угу.