В этой статье покажу Вам небольшой «трюк» для вставки свойств в классы и структуры.
Работает это примерно так: формируется строка (из переданных аргументов — тип для значения свойства и имя свойства, а также из собственно, объявления приватной переменной и объявления самого свойства) с описанием методов установки/считывания свойства и помещается в константный массив символов — и все, шаблон готов к использованию.
Для использования шаблона применяется выражение mixin, помещающееся в то место класса/структуры, куда необходимо вставить требуемое свойство, которому в аргументы передаются тип данных для свойства и имя свойства.
А вот и сам код «трюка»:
// удобное создание свойств template addProperty(string propertyType, string propertyName) { import std.string : format; const char[] addProperty = format( `private %1$s _%2$s; @property void %2$s(%1$s value) { _%2$s = value; } @property %1$s %2$s() { return _%2$s; }`, propertyType, propertyName ); }
Применить это можно, например, так:
class P { mixin(addProperty!("int", "area")); };
Как видите, все достаточно просто.