W szablonie funkcyjnym pierwszy zbiór tekstów zawiera argumenty szablonu, a drugi zestaw zawiera argumenty funkcji.
http://dlang.org/template.html#function-templates
Można przepisać że jako:
template exec(alias f, T) {
T exec(T t) {
return f(t);
}
}
W punkcie użytkowania, jeżeli członek szablon ma taką samą nazwę jak sam szablon, nie trzeba pisać je dwukrotnie. Nazywa się to tytułową sztuczką. http://www.bing.com/search?q=eponymous+trick+d+programming+language&qs=n&form=QBRE&pq=eponymous+trick+d+programming+languag&sc=0-0&sp=-1&sk=
Chociaż większość kodu D widziałem używa krótszego formatu - długa składnia szablonu jest dość rzadka dla funkcji, klas lub struktur, co może zrobić też: struct Foo (T) {} jest szablonem struktury z argumentem T.
Argumentami w tym szablonie exec są "alias f", który jest dowolnym symbolem, który zdecydujesz się przekazać, np. nazwa funkcji lub zmiennej, i "T", po prostu dowolny rodzajowy. Powtórzone T są odniesieniami do tego typu.
W miejscu użytkowania, będziesz najprawdopodobniej zobaczyć to tak:
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.
Drugim argumentem jest tutaj szablon zorientowali się niejawnie przez argumenty funkcji. Jest to bardzo częste w przypadku szablonów funkcji: wiele argumentów szablonu jest niejawnych, więc rzadko je widać. Możesz zobaczyć to, o czym mowa w D dyskusji jako "IFTI", co oznacza "niejawne tworzenie szablonów funkcji".
Dang, masz prof która pisze w D ?! coool! – Mehrdad
Tak. Napisał długą gazetę, którą kazał nam przeczytać, zalecając nauczanie D jako kursu wprowadzającego (teraz uczą najpierw C#). – David
Podoba mi się do tej pory, ale trochę trudno jest przyzwyczaić się do składni. – David