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

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



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


/*
方法 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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
boost::system::error_code是一个用于表示错误代码的类。它可以用于在程序中处理和传递错误状态。 boost::system::error_code的初始化可以通过多种方式来完成。其中一种方式是使用构造函数进行初始化。构造函数有多个重载,可以接受不同的参数类型进行初始化。 一种常用的方式是使用错误码的整数值来初始化error_code对象。例如,可以使用一个整型数值表示的错误码来初始化error_code对象,如下所示: boost::system::error_code err_code(100); 这样就创建了一个error_code对象err_code,其错误码值为100。 另一种方式是使用错误码的枚举值来初始化error_code对象。boost库中定义了许多常见的错误码枚举,可以直接使用这些枚举值来初始化error_code对象。例如,可以使用boost::system::errc::host_not_found枚举值来表示主机未找到错误码,如下所示: boost::system::error_code err_code(boost::system::errc::host_not_found); 除了初始化错误码的数值外,还可以传递一个错误类别,用于指定错误的类型。例如,可以使用std::error_code的默认错误类别来创建一个error_code对象,如下所示: boost::system::error_code err_code(100, std::generic_category()); 这样就创建了一个具有错误码值为100和默认错误类别的error_code对象。 总之,boost::system::error_code的初始化可以通过不同的构造函数来完成,可以使用错误码的整数值或枚举值进行初始化,也可以指定错误类别。根据具体的应用场景和需求,选择合适的方式进行初始化即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值