参数声明:在D中传递未知类型的函数

时间:2016-11-20 04:02:51

标签: d

考虑一个函数foo,它接受​​另一个函数f和未知类型d的数据。如果在函数定义时都不知道f的返回类型和d的类型,那么如何指定函数声明?也就是说,我怎样才能表达如下内容:

void foo(_ f, _ d) {
    // ..

其中_表示该类型的通配符/全部匹配。

扩展的另一个问题:如果他们的身份可以是任何东西,是否可以指定类型是相同的?换句话说,_可能是任何类型,但类型必须相同。

1 个答案:

答案 0 :(得分:2)

函数必须知道它们的类型。否则,为它们生成代码将非常困难,并且链接器肯定无法处理它们。话虽如此,与C ++一样,D也有模板,因此您可以声明函数模板,以便在编译使用它的代码时生成和编译函数本身。因此,如果您想要一个带有两个相同类型参数但可以使用各种类型的函数的函数,那么您将需要使用函数模板。 e.g。

void foo(T)(T a, T b)
{
    ...
}

或者,如果需要多种类型,您可以执行类似

的操作
void foo(T, U)(T a, U b)
{
    ...
}

在任何一种情况下,当代码调用foo时,编译器将根据实际参数的类型推断出参数的类型。使用不同的参数类型调用相同的函数模板将导致编译器生成其他函数。官方文档的相关部分在这里:

http://dlang.org/spec/template.html#function-templates

但是,在线书籍的这一章可能会提供更多信息:

http://ddili.org/ders/d.en/templates.html

我建议你考虑阅读整本书(或者至少要仔细阅读),如果你想要一些能解释D的基础知识的话。