通用限制类型

时间:2014-01-20 18:52:34

标签: generics max d html min

有没有人制作了一个通用的D结构,它将min组合在一起 一个类型的最大值和默认值 - 在它们中初始化它们 正确的方法?

这样的东西
 alias Pair(T) = Tuple!(T, T);

 struct Limits(T)
 {
     /* TODO: Fix purity of this by fixing Bytes.value() */
     auto init() @trusted /* pure */ nothrow { return tuple(T.max, T.min); }
     alias _minmax this;
     Pair!T _minmax;
 }
 auto limits(T)() { return Limits!T(); }
 unittest {
     Limits!int x;
     dln(x);
 }

我希望min和max默认初始化为T.max,T.min所以他们 准备好x = min/max(x, ...)逻辑。但是代码 上面不起作用,因为没有调用init()函数和我 不知道为什么。我不能使用默认成员初始化 因为我希望Limits也适用于SysTime等类型 当min和max只在运行时知道。

我知道std.datetime.span,但它不是通用的。

想点什么?

另请参阅:http://forum.dlang.org/thread/dwuiknzqzmjkefnwmnio@forum.dlang.org#post-dwuiknzqzmjkefnwmnio:40forum.dlang.org

更新

我刚刚读到std.datetime.IntervalT时我应该使用SysTime。这简化了事情。

1 个答案:

答案 0 :(得分:3)

未调用init函数,因为您从未调用它!除了复制初始值设定项之外,D 从不执行默认构造。执行此类操作的方法是@disable this();,使Limits!int x;使用编译错误,强制用户使用参数调用工厂函数或构造函数来初始化它。

struct S {
     @disable this(); // disable S s; declars
     this(int min, int max) { ... } // allow S s = S(0, 10);
}