Я учу себя «D», и у меня было, что может показаться основным для некоторых, вопрос о шаблонах. Например, в статье я в настоящее время чтения (см в нижней части этого поста) содержит следующий код:Понимание шаблонов в D
int foo(int x)
{
return x;
}
string foo(string x)
{
return x;
}
void main()
{
assert(foo(12345) == 12345);
assert(foo("hello") == "hello");
}
Очевидно, что этот конкретный фрагмент кода меньше, чем элегантный и шаблон позволит устранить повторение:
foo(T)(T x)
{
return x;
}
void main()
{
assert(foo!(int)(12345) == 12345);
assert(foo!(string)("hello") == "hello");
}
Второй пример довольно простой, поскольку мы просто возвращаем переданное значение. Моя путаница возникает из-за того, что функция, однако шаблонная, все же появляется, чтобы быть ограничена одним типом значения, так как я не могу легко представить строку и целочисленное значение, имеющее много общего. Поэтому программист должен проверить тип передаваемой переменной и затем написать код для обработки случаев строки или целого числа отдельно? Является ли создание большого функционального органа действительно более эффективным? Я понимаю, что моя незнакомость с шаблонами очевидна. Поэтому мой вопрос :)
http://nomad.so/2013/07/templates-in-d-explained/
В https://github.com/PhilippeSigaud/D-templates-tutorial вы можете найти целую книгу (бесплатно) о шаблонах D. Это отличное чтение. – DejanLekic