Dlang:如何在模板函数上强制执行接口

Dlang : how to enforce an interface on a template function

我已经在谷歌上搜索了两个小时,但没有成功。

如果我有一个模板函数并且我想在模板类型上强制执行一个接口,我该怎么做?

例如。

void doStuff(T)(bool param) /*if T is a Throwable*/ {
    // do stuff...
}

您可以使用模板约束来做到这一点:

void doStuff(T)(bool param) if(is(T : Throwable)) { }

is 表达式可能非常复杂,所以我建议通读 this.

另一种方法,而不是像 mitch_ 的回答那样使用 is 关键字。

void doStuff(T : Throwable)(bool param) { }

参见:https://dlang.org/spec/template.html#TemplateTypeParameterSpecialization