C++11中如何输出enum class的值
Unlike an unscoped enumeration, a scoped enumeration is not implicitly convertible to its integer value. You need to explicitly convert it to an integer using a cast:
std::cout << static_cast<std::underlying_type<A>::type>(a) << std::endl;
You may want to encapsulate the logic into a function template:
template <typename Enumeration>
auto as_integer(Enumeration const value)
-> typename std::underlying_type<Enumeration>::type
{
return static_cast<typename std::underlying_type<Enumeration>::type>(value);
}
used as:
std::cout << as_integer(a) << std::endl;
示例:
头文件:enum.h
#include <iostream>
namespace myenum {
// 一般的枚举
enum PieceType {
PieceTypeKing, PieceTypeQueen, PieceTypeRook, PieceTypePawn
};
// 设置了值得枚举
enum PieceTypeAnother {
PieceTypeKingA=, PieceTypeQueenA, PieceTypeRookA=, PieceTypePawnA
};
// 强类型的枚举
enum class MyEnum {
EnumValue1,
EnumValue2 = ,
EnumValue3
};
// 改变了类型的强类型枚举
enum class MyEnumLong : unsigned long {
EnumValueLong1,
EnumValueLong2 = ,
EnumValueLong3
};
template<typename T> std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e) {
return stream << static_cast<typename std::underlying_type<T>::type>(e);
}
}
main函数:main.cpp
#include "enum.h"
int main() { std::cout << "test enum" << std::endl;
std::cout << "一般的枚举" << myenum::PieceType::PieceTypeKing << std::endl;
std::cout << "设置了值的枚举" << myenum::PieceTypeAnother::PieceTypeQueenA << std::endl;
std::cout << "强类型的枚举" << myenum::MyEnum::EnumValue3 << std::endl;
std::cout << "改变了类型的强类型枚举" << myenum::MyEnumLong::EnumValueLong1 << std::endl; std::cout << "end of this program" << std::endl;
}
重写了之后,就不用再对强类型的进行强转了,呵呵
编译的时候要加上c++11的选项:
g++ main.cpp -std=c++
C++11中如何输出enum class的值的更多相关文章
- 对C++11中的`移动语义`与`右值引用`的介绍与讨论
本文主要介绍了C++11中的移动语义与右值引用, 并且对其中的一些坑做了深入的讨论. 在正式介绍这部分内容之前, 我们先介绍一下rule of three/five原则, 与copy-and-swap ...
- c++ 11 移动语义、std::move 左值、右值、将亡值、纯右值、右值引用
为什么要用移动语义 先看看下面的代码 // rvalue_reference.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #includ ...
- C++11中的Lambda表达式
原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...
- 浅谈C++11中的多线程(三)
摘要 本篇文章围绕以下几个问题展开: 进程和线程的区别 何为并发?C++中如何解决并发问题?C++中多线程的基本操作 浅谈C++11中的多线程(一) - 唯有自己强大 - 博客园 (cnblogs.c ...
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- IOS中的Block与C++11中的lambda
ios中的block 可以说是一种函数指针,但更确切的讲,其实际上其应该算是object-c对C++11中lambda的支持或者说是一个语言上的变体,其实际内容是一样的,C++的lambda我已经有简 ...
- 【matlab】将matlab中数据输出保存为txt或dat格式
将matlab中数据输出保存为txt或dat格式 总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt ...
- [转载] C++11中的右值引用
C++11中的右值引用 May 18, 2015 移动构造函数 C++98中的左值和右值 C++11右值引用和移动语义 强制移动语义std::move() 右值引用和右值的关系 完美转发 引用折叠推导 ...
- C++ 11中的右值引用以及std::move
看了很多篇文章,现在终于搞懂了C++ 中的右值以及std::move 左值和右值最重要的区别就是右值其实是一个临时的变量 在C++ 11中,也为右值引用增加了新语法,即&& 比 ...
随机推荐
- the most beautiful media player on the linux platform.
the most beautiful media player on the linux platform------> deepin media player http://wiki.linu ...
- mysql 5.5数据库主从配置步骤详解
上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5. ...
- SQL触发器 常用语句
一.创建一个简单的触发器 CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT.UPDATE 或 DELETE AS T-SQL 语句 注意:触发器名称是不加引号的. ...
- [转]Spring mvc interceptor配置拦截器,没有登录跳到登录页
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.s ...
- Appium 设置手机连接方式
使用appium的 Connection 和driver 的setConnection方法,可以切换手机的上网方式 // 切换到wifi Connection cnn = Connection.WIF ...
- RocketMQ最佳实践(一)4.0版本/概念介绍/安装调试/客户端demo
为什么选择RocketMQ 我们来看看官方回答: “我们研究发现,对于ActiveMQ而言,随着越来越多的使用queues和topics,其IO成为了瓶颈.某些情况下,消费者缓慢(消费能力不足)还会拖 ...
- scp拷贝文件
有了亚马逊的ec2后,物美价廉,但是,亚马逊的aws使用密钥登陆的,命令和密码登录有一点不同.记录. 1.有密钥登陆,首先要把密钥文件 xxx.pem 的权限设为700,否则会报错. scp -i x ...
- 谷歌IP地址
http://www.yuxiaoxi.com/2014-06-11-google-meet-you.html
- Atitit opencv模板匹配attilax总结
Atitit opencv模板匹配attilax总结 找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁 ...
- Atitit nodejs5 nodejs6 nodejs 7.2.1 新特性attialx总结
Atitit nodejs5 nodejs6 nodejs 7.2.1 新特性attialx总结 1.1. Node.js 4.0.0 已经发布了 .这是和 io.js 合并之后的首个稳定版本,它 ...