有人能解释一下D语言模板速记表吗?

有人能解释一下D语言模板速记表吗?,d,D,我有一位教授用速记法写了他所有的D模板示例: T exec(alias f,T)(T t) { return f(t); } 我找不到任何例子来解释这意味着什么。这里有人能解释一下吗?在函数模板中,第一组参数包含模板参数,第二组参数包含函数参数 您可以将其改写为: template exec(alias f, T) { T exec(T t) { return f(t); } } 在使用点,如果模板成员与模板本身具有相同的名称,则无需编写两次。这被

我有一位教授用速记法写了他所有的D模板示例:

T exec(alias f,T)(T t) {
    return f(t);
}

我找不到任何例子来解释这意味着什么。这里有人能解释一下吗?

在函数模板中,第一组参数包含模板参数,第二组参数包含函数参数

您可以将其改写为:

template exec(alias f, T) {
    T exec(T t) {
         return f(t);
    }
}
在使用点,如果模板成员与模板本身具有相同的名称,则无需编写两次。这被称为同名伎俩

虽然我见过的大多数D代码都使用较短的格式,但对于函数、类或结构来说,长模板语法是非常罕见的,因为它们也可以做到这一点:struct Foo(T){}是一个带参数T的结构模板

此exec模板中的参数本身是“别名f”,它是您决定传递它的任何符号,例如函数或变量名,“T”,只是任何泛型类型。重复的T是对该类型的引用

在使用点,您很可能会看到如下情况:

int foo(int a) { return a; } // just a regular function
exec!(foo)(10); // instantiates the template with arguments (foo, int), and then calls the function.
这里的第二个模板参数是由函数参数隐式计算出来的。这在函数模板中非常常见:很多模板参数都是隐式的,所以很少看到它们被写出来。您可能会在D讨论中看到它被称为“IFTI”,意思是“隐式函数模板实例化”

这里有一个速记模板函数。写它的«正常方式»是:

template exec(alias f, T) {
    T exec(T t) {
        return f(t);
    }
}
D
中,如果模板作用域中的符号与模板本身具有相同的名称,则可以将其用作模板(这是一个别名)

然后,
别名
模板参数意味着它可以是任何符号。在这里,它可以是一个委托、一个函数、一个函数或任何东西。如果您的老师使用
std.functional.unaryFun
,它甚至可能是一个字符串

< > >代码> t>代码>参数,就像C++一样,只是一个类型符号。

这个函数只应用了一个函子。以下是最有力的版本:


Dang,你有一个用D写的教授?!酷!是的,他写了一篇长的论文,他让我们读到,他把D的教学作为一门入门课程(现在他们教C)。我很喜欢它,但是现在有点难适应语法。哦,老师在C++标准委员会上,所以我认为这说明了很多。你可能会看到另一个看起来很奇怪的速记模板语法是,例如,to!int(“10”);。如果只有一个简单(只有一个单词)模板参数,则不必在其周围加括号。到int(“10”)与to相同!(int)(“10”)。如果您想了解更多关于D模板的信息:它是“functor”,而不是“fonctor”。“func”来自函数。
template exec(alias f, T) {
    T exec(T t) {
        return f(t);
    }
}