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

时间:2013-12-26 14:05:12

标签: d

如果类型为byte/short/int/longubyte/ushort/uint/ulong,我想要检查。第一个想法是使用构造is(T1:T2),但is(ulong:long)==is(long:ulong)==true,所以它不是这样的。

现在我正在使用像is(T:long) && (cast(T)(-1)<cast(T)(1))这样的东西,但这段代码对我来说似乎很难看。

那么只有当类型是无符号的时候才有更优雅的逻辑语句返回true吗?

2 个答案:

答案 0 :(得分:10)

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

使用它像:

if(isUnsigned!T1) {
    //...
}

答案 1 :(得分:7)

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