Наверняка вы уже видели некоторые посты о D. Шаблоны, псевдочлены, потоки… Сегодня я вам расскажу о такой фиче языка, как UFCS, или Universal Function Call Syntax. Начнем с простого.
Рассмотрим некий класс A и функцию, принимающую указатель на его экземпляр:
Спросите любого программиста на Си, как бы он её вызвал. Наверняка вы услышите что-то подобное:
Фишка в том, что в D первый аргумент может выступать в роли базового идентификатора, чьим методом является данная функция, т.е. функцию можно вызвать следующим образом:
Это открывает большой простор для построения очень интересных, последовательных(и даже быстрых) конструкций.
Осторожно: в конце цветное изображение!
Рассмотрим некий класс A и функцию, принимающую указатель на его экземпляр:
class A {
int a;
}
void foo(A a) {}
Спросите любого программиста на Си, как бы он её вызвал. Наверняка вы услышите что-то подобное:
void main() {
auto b = new A;
foo(b);
}
Фишка в том, что в D первый аргумент может выступать в роли базового идентификатора, чьим методом является данная функция, т.е. функцию можно вызвать следующим образом:
b.foo();
Это открывает большой простор для построения очень интересных, последовательных(и даже быстрых) конструкций.
Осторожно: в конце цветное изображение!