任何人都可以解释,为什么
var oficinas = (ViewModel as CrdMovil.Core.ViewModels.OficinaViewModel).Oficinas;
的std :: is_signed<>什么不做,它在锡上说的是什么? 感谢...
答案 0 :(得分:7)
如果我们查看is_signed的文档,则说:
如果 T是带符号的算术类型,则提供成员常量值等于true。对于任何其他类型,值为false。
并且枚举不是算术类型,因此结果应为false。从草案C ++ 11标准部分3.9.1
基本类型[basic.fundamental]:
[...]积分和浮动类型统称为算术 类型[...]
您可以使用std::underlying_type获取枚举的基础类型,然后将std::is_signed
应用于该类型。
答案 1 :(得分:2)
对于记录,要知道强类型枚举的基础类型(即,不是枚举本身,can't be检查签名)是否已签名,可以查询std::underlying_type<E>::type
:
std::is_signed<std::underlying_type<E>::type>::value
或定义自己的特质:
#include <type_traits>
template <typename T>
struct identity { using type = T; };
template <typename T>
struct is_signed
: std::is_signed<typename std::conditional<std::is_enum<T>::value
, std::underlying_type<T>
, identity<T>>::type::type> {};