d - 接口模板作为函数参数的语法
问题描述
界面模板如下所示:
interface TemplateInterface(T) {
T x();
}
该接口需要用作函数的参数,但我想避免在函数签名中定义模板类型。有没有办法让函数签名接受传递给函数的任何模板类型,比如模板函数?
例如:
// no good, do not want to constrain template type at this point
void func1(TemplateInterface!int parm1) {...
// this would be better, but the syntax is wrong apparently
void func1(TemplateInterface parm1) {...
解决方案
我相信你想要的是
void func1 (T) (TemplateInterface!T parm1) {...
这里,有一个用于参数类型func1
的编译时参数和一个上述类型的运行时参数。T
TemplateInterface!T
parm1
一个更完整的例子:
import std.stdio;
interface TemplateInterface(T) {
T x();
}
class Instance(T) : TemplateInterface !(T) {
T x() {return cast (T) (1.2345);}
}
void func1 (T) (TemplateInterface!T parm1) {
writeln (typeof(parm1.x()).stringof, " ", parm1.x());
}
void main() {
auto a = new Instance !(int) ();
auto b = new Instance !(real) ();
func1(a); // int 1
func1(b); // real 1.2345
}
推荐阅读
- scala - Statistics.corr 在 IntelliJ IDEA 中给出以下错误:无法解析重载方法“corr”
- json - 在空手道中,我试图从 API Json 响应中找到一个密钥,密钥看起来像“payment:canel”但出现错误
- python - 如何将pygame窗口固定在顶部?
- python - 如何直接在终端中运行用 atom 编辑器编写的 python fie?
- python - PyCall import("numpy") 产生 MKL 致命错误
- audiokit - 在范围内找不到 AudioEngine
- flutter - Flutter 登录成功后如何返回应用首页
- javascript - 响应中的“Access-Control-Allow-Credentials”标头为“”,当请求的凭据模式为“包含”时,该标头必须为“真”
- amazon-dynamodb - 如何处理 dynamodb WCU 限制?超过限制时是否排队?
- html - 一个 HTML 标题“提示”