首页 > 解决方案 > 接口模板作为函数参数的语法

问题描述

界面模板如下所示:

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) {...

标签: d

解决方案


我相信你想要的是

void func1 (T) (TemplateInterface!T parm1) {...

这里,有一个用于参数类型func1的编译时参数和一个上述类型的运行时参数。TTemplateInterface!Tparm1

一个更完整的例子:

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
}

推荐阅读