boost教程(十八):错误处理——system

每一部分都单独注释的,运行时取消注释,将其他部分注释起来就可以。



/*
Boost.System 可以由特定操作系统平台的错误代码转换出跨平台的错误代码。
Boost.Exception 允许给任何异常添加额外的信息,以便利用 catch 相应的处理程序更好的对异常作出反应。
*/
#include  
#include  
#include 
#include  
#include  


/*
方法 name() 和 message() 在类 boost::system::error_category 中被定义为纯虚拟函数,所以它们是必须提供的。
至于额外的方法,在必要的条件下,可以重载相对应的默认行为。
*/
class application_category :
	public boost::system::error_category
{
public:
	const char *name() const BOOST_NOEXCEPT { return "application"; }
	std::string message(int ev) const { return "error message"; }
};


application_category cat;

int test()
{
	
	
	///*
	//boost::system::error_code 是一个最基本的类,用于代表某个特定操作系统的异常。 
	//由于操作系统通常枚举异常,boost::system::error_code 中以变量的形式保存错误代码 int。
	//*/
	//boost::system::error_code ec;
	////boost::asio::ip::host_name() 可以返回正在执行的应用程序名。返回的是计算机名字,而不是用户名。
	///*
	//如果当前的操作系统函数失败, 这个参数包含相关的错误代码。 
	//也可以通过调用 boost::asio::ip::host_name() 而不使用任何参数,以防止错误代码是非相关的。
	//*/
	//std::string hostname = boost::asio::ip::host_name(ec);
	////错误代码0通常意味着没有错误,其他的值的意义则依赖于操作系统并且需要查看相关手册。
	//std::cout << ec.value() << std::endl;
	//
	///*
	//类型 boost::system::error_code 的错误代码总是属于可以使用 category() 方法获取的分类。 
	//通过预定义的对象 boost::system::system_category 来表示操作系统的错误。
	//通过调用 category() 方法,可以返回预定义变量 boost::system::system_category 的一个引用。 
	//它允许获取关于分类的特定信息。 例如在使用的是 system 分类的情况下,通过使用 name() 方法将得到它的名字 system。
	//
	//实际上就是错误分类表,避免同一个错误数值被重复利用
	//*/
	//std::cout << ec.category().name() << std::endl;






	


	/*
	程序员应当在希望定义某个特定应用程序的错误代码时创建一个新的分类。 
	这使得任何错误代码都不会影响到其他开发者的错误代码。
	本例中定义了一个用于新分类 application_category 的错误代码 ec 。
	然而错误代码14不再是系统错误;他的意义被开发者指定为新的错误分类。
	*/
	//boost::system::error_code ec(14, cat);
	//std::cout << ec.value() << std::endl;
	//std::cout << ec.category().name() << std::endl;
	////当方法 name() 返回错误分类名时,可以使用方法 message() 来获取针对某个错误代码的描述。
	//std::cout << ec.message() << std::endl;
	





	/*
	boost::system::error_code 包含了一个叫作 default_error_condition() 的方法,
	它可以返回 boost::system::error_condition类型的对象。
	boost::system::error_condition 的接口几乎与 boost::system::error_code 相同。
	唯一的差别是只有类 boost::system::error_code 提供了方法 default_error_condition() 。
	*/
	/*
	当类 boost::system::error_code 被当作当前平台的错误代码时, 类 boost::system::error_condition 
	可以被用作获取跨平台的错误代码。 通过调用 default_error_condition() 方法,
	可以把依赖于某个平台的的错误代码转换成 boost::system::error_condition 类型的跨平台的错误代码。
	(单一平台没撒子用)
	*/
	/*boost::system::error_code ec;
	std::string hostname = boost::asio::ip::host_name(ec);
	boost::system::error_condition ecnd = ec.default_error_condition();
	std::cout << ecnd.value() << std::endl;
	std::cout << ecnd.category().name() << std::endl;
	*/






	/*
	boost::system::system_error ,它派生于 std::runtime_error。 
	它可被用来传送发生在异常里类型为 boost::system::error_code 的错误代码。
	*/
	try
	{
		/*
		独立的函数 boost::asio::ip::host_name() 是以两种方式提供的:
		一种是需要类型为 boost::system::error_code 的参数,
		另一种不需要参数。 第二个版本将在错误发生时抛出 boost::system::system_error 类型的异常。
		异常传出类型为 boost::system::error_code 的相应错误代码。
		*/
		std::cout << boost::asio::ip::host_name() << std::endl;
	}
	catch (boost::system::system_error &e)
	{
		boost::system::error_code ec = e.code();
		std::cerr << ec.value() << std::endl;
		std::cerr << ec.category().name() << std::endl;
	}


	system("pause");
	return 0;
}

你可能感兴趣的:(boost教程)