c++11新增了enum class,相比传统的enum好处多了很多,但也有些让人不太爽的地方,如:输出到std流时会报错,进行了强转则没有信息输出,那么,到底该如何将enum class的值出到std流呢?
下面,介绍一种通过重载<<操作符的方法来实现,如下:
#include <iostream>
#include <sstream>
enum class error_code
{
ok=0,
invalid_args=1,
runtime_error=2,
//..
};
//重载operator<<的操作符,使error_code支持<<输出
std::ostream & operator<<(std::ostream &os,const error_code &ec)
{
os<<static_cast<std::underlying_type<error_code>::type>(ec);
return os;
}
using namespace std;
int main(int argc,char *argv[])
{
cout<<error_code::ok<<endl;
cout<<error_code::invalid_arg<<endl;
cout<<error_code::runtime_error<<endl;
stringstream ss;
ss<<error_code::runtime_error;
return 0;
}