如何将std.typecons.Typedef与函数一起使用?

时间:2015-07-15 20:06:58

标签: alias d typedef initializer

我有:

typedef void function(int) handler = &noOp;

由于不推荐使用typedef,我被告知使用别名(不允许设置默认初始值设定项)或std.typecons.Typedef(确实如此)。但是,以下内容不起作用:

import std.typecons;
alias handler = Typedef!(void function(int), &noOp);

如何在没有typedef

的情况下设置功能类型的初始值设定项

1 个答案:

答案 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重载等来自定义此操作,具体取决于您需要的确切行为。问我,我可以澄清,但你也想玩它,看看你现在是否喜欢它。