Показать сообщение отдельно
Старый 06.01.2010, 17:20   #4
ISergey
AnyKey`щик
 
Регистрация: 10.11.2008
Сообщений: 18
Написано 4 полезных сообщений
(для 5 пользователей)
Ответ: Обработка ошибок, логи и не только.

Ну тогда так...
#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;
}
__________________
Шутить надо так, чтобы потом не было мучительно больно за бесцельно выбитые зубы.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (06.01.2010)