0
点赞
收藏
分享

微信扫一扫

d版本块作为表达式


​​原文​​

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")) ...

​版本​​​不合适时,使用​​枚举​​.


举报

相关推荐

0 条评论