【发布时间】:2012-08-27 16:29:40
【问题描述】:
我已经开始从枚举中选择随机值,如下所示:
import std.random : uniform;
import std.stdio : writefln;
import std.conv;
enum E {A, B, C}
int main(){
auto select = cast(E)uniform(to!int(E.min), to!int(E.max));
writefln("select %s", select);
return 0;
}
这非常冗长,如果任何枚举成员的值超出默认值(或大于int),则容易出现问题。
理想情况下,我会采用一个代表枚举元素的范围,并将其提供给randomSample。但是,这似乎是不可能的。
有没有更惯用的方法从 D 中的枚举中选择一个随机值?
编辑:
使用fwend提供的答案,这里有一个模板函数,可以实现我想要的:
T RandomEnumElement(T)() if (is(T == enum)){
auto members = [EnumMembers!T];
return members[(uniform(0, members.length))];
}
【问题讨论】:
标签: d