如果类型为byte/short/int/long
或ubyte/ushort/uint/ulong
,我想要检查。第一个想法是使用构造is(T1:T2)
,但is(ulong:long)==is(long:ulong)==true
,所以它不是这样的。
现在我正在使用像is(T:long) && (cast(T)(-1)<cast(T)(1))
这样的东西,但这段代码对我来说似乎很难看。
那么只有当类型是无符号的时候才有更优雅的逻辑语句返回true
吗?
答案 0 :(得分:10)
std.traits
中有一个模板可以满足您的需求:
http://dlang.org/phobos/std_traits.html#.isUnsigned
使用它像:
if(isUnsigned!T1) {
//...
}
答案 1 :(得分:7)
如果您已经知道该类型是数字,则另一种选择是T1.min == 0
。