考虑一个函数foo
,它接受另一个函数f
和未知类型d
的数据。如果在函数定义时都不知道f
的返回类型和d
的类型,那么如何指定函数声明?也就是说,我怎样才能表达如下内容:
void foo(_ f, _ d) {
// ..
其中_
表示该类型的通配符/全部匹配。
扩展的另一个问题:如果他们的身份可以是任何东西,是否可以指定类型是相同的?换句话说,_
可能是任何类型,但类型必须相同。
答案 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的基础知识的话。