原文
version(Windows)
alias socket_t = size_t;
else
alias socket_t = int;
目前这样,太麻烦了.希望能够:
alias socket_t = version(Windows) size_t else int;
//或类似
alias socket_t = switch (builtin.target.os) {
.windows => size_t,
else => int
};
我这样:
enum BUGFIX_MAX_LIVES = Version.SM64_US || Version.SM64_EU || Version.SM64_SH;
enum BUGFIX_KING_BOB_OMB_FADE_MUSIC = Version.SM64_US || Version.SM64_EU;
如果只关心"全局
"标识符,这样:
module mver;
struct ver {
template opDispatch(string M) {
mixin(`
version(`~M~`) enum opDispatch = true;
else enum opDispatch = false;
`);
}
}
//
import mver;
static if (ver.linux && !ver.D_LP64) {
/* ... */
}
技巧:
template isVersion(string ver) {
mixin(format(q{
version(%s) {
enum isVersion = true;
}
else {
enum isVersion = false;
}
}, ver));
}
pragma(msg, isVersion!"foo"); // false
pragma(msg, isVersion!"assert"); // true
这样:
import std.meta :;
static if (anySatisfy!(isVersion, "assert", "unittest")) ...
版本
不合适时,使用枚举
.