我有:
typedef void function(int) handler = &noOp;
由于不推荐使用typedef,我被告知使用别名(不允许设置默认初始值设定项)或std.typecons.Typedef(确实如此)。但是,以下内容不起作用:
import std.typecons;
alias handler = Typedef!(void function(int), &noOp);
如何在没有typedef
?
答案 0 :(得分:2)
这是了解基础知识的一个很好的例子 - 我认为理解struct
的细节比Typedef
更有帮助,因为你可以用它做更多的事情。以下是如何做到这一点:
void noOp(int) {}
struct handler {
void function(int) fn = &noOp; // here's the initializer
alias fn this; // this allows implicit conversion
}
void main() {
handler h;
assert(h == &noOp); // it was initialized automatically!
static void other(int) {}
h = &other; // and you can still reassign it
}
alias this
可能存在争议 - 它允许隐式转换为基本类型,例如alias
,但这与typedef
不同。您还可以通过执行单个构造函数,opAssign
重载等来自定义此操作,具体取决于您需要的确切行为。问我,我可以澄清,但你也想玩它,看看你现在是否喜欢它。