Ответ: Обработка ошибок, логи и не только.
Ну тогда так...
#include <iostream>
using namespace std;
class Error;
template <typename T>
class IError{
public:
IError(){
Error *err = new T;
err->Log();
delete err;
}
};
class Error
{
public:
virtual ~Error() { }
void Log() { cout<< GetErrorName() << " : " <<GetSolutionName() << endl; }
virtual const char * GetErrorName() = 0;
virtual const char * GetSolutionName() = 0;
};
class BeerIsOver : public Error
{
public:
const char * GetErrorName() { return "You beer is over";}
const char * GetSolutionName() { return "bye";}
};
class LightIsRed : public Error
{
public:
const char * GetErrorName() { return "Lamp is red!";}
const char * GetSolutionName() { return "don't see";}
};
int main()
{
try
{
throw IError<BeerIsOver>();
}
catch(...)
{
}
try
{
throw IError<LightIsRed>();
}
catch(...)
{
}
cout << "Ok..." << endl;
return 0;
}
Можно и так дописать
.......
typedef IError<LightIsRed> ILightIsRed;
int main()
{
try
{
throw ILightIsRed();
}
catch(...)
{
}
return 0;
}
__________________
Шутить надо так, чтобы потом не было мучительно больно за бесцельно выбитые зубы.
|