如何将 std.typecons.Typedef 与函数一起使用?
How can I use std.typecons.Typedef with functions?
我有:
typedef void function(int) handler = &noOp;
由于不推荐使用 typedef,我被告知使用别名(不允许设置默认初始值设定项)或 std.typecons.Typedef(允许)。但是,以下内容不起作用:
import std.typecons;
alias handler = Typedef!(void function(int), &noOp);
如何在没有 typedef
的情况下设置函数类型的初始值设定项?
这是了解基础知识的好例子 - 我认为了解 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
重载等来自定义它,具体取决于您需要的确切行为。问我,我可以澄清,但你也会想玩它,看看你是否喜欢它现在的工作方式。
我有:
typedef void function(int) handler = &noOp;
由于不推荐使用 typedef,我被告知使用别名(不允许设置默认初始值设定项)或 std.typecons.Typedef(允许)。但是,以下内容不起作用:
import std.typecons;
alias handler = Typedef!(void function(int), &noOp);
如何在没有 typedef
的情况下设置函数类型的初始值设定项?
这是了解基础知识的好例子 - 我认为了解 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
重载等来自定义它,具体取决于您需要的确切行为。问我,我可以澄清,但你也会想玩它,看看你是否喜欢它现在的工作方式。