如果类型未签名,我该如何检查?

Tim*_*man 5 d

我想要检查,如果类型是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只有当类型是无符号时才会返回更优雅的逻辑语句吗?

Chr*_*ain 10

有一个模板可以满足std.traits您的需求:http: //dlang.org/phobos/std_traits.html#.isUnsigned

使用它像:

if(isUnsigned!T1) {
    //...
}
Run Code Online (Sandbox Code Playgroud)


And*_*scu 7

如果您已经知道类型是数字,那么另一种选择就是T1.min == 0.