2016-11-20 66 views
1

考虑函数foo,它需要另一个函数f和未知类型d的数据。如果函数定义时返回类型fd的类型都未知,那么函数声明如何指定?也就是说,我怎么能表达类似如下:参数声明:在D中传递一个未知类型的函数

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

其中_表示通配符/捕获所有匹配的类型。

扩展的另一个问题:是否可以指定如果他们的身份可以是任何类型的类型是相同的?换言之,_可能是任何类型,但类型需要相同。

+0

经过仔细审查,它看起来像模板(https://dlang.org/spec/template.html)被设计为t o通过提供一种通用功能的方法来帮助解决这些问题。如果有人想提出其他方法,请分享。 –

回答

2

函数必须知道它们的类型。否则,为它们生成代码将非常困难,而链接器当然无法处理它们。就像C++一样,D有模板,所以你可以声明函数模板,以便在编译使用它的代码时生成和编译函数本身。所以,如果你想要一个函数接受两个相同类型的参数,但可以处理不同的类型,那么你就需要使用一个函数模板。例如

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的基本知识很多。

相关问题