c++11以正确的姿势输出enum class的值

时间:2025-02-11 07:21:18

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;
}