我已经开始随机从枚举中选择值,像这样:
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))];
}
Evalues
需要类型为E[]
。 - cmh