有没有人制作了一个通用的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
,但它不是通用的。
想点什么?
更新:
我刚刚读到std.datetime.Interval
为T
时我应该使用SysTime
。这简化了事情。
答案 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);
}