Удобное создание свойств в классах и структурах

В этой статье покажу Вам небольшой «трюк» для вставки свойств в классы и структуры.

Работает это примерно так: формируется строка (из переданных аргументов — тип для значения свойства и имя свойства, а также из собственно, объявления приватной переменной и объявления самого свойства) с описанием методов установки/считывания свойства и помещается в константный массив символов — и все, шаблон готов к использованию.

Для использования шаблона применяется выражение 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"));
};

Как видите, все достаточно просто.

aquaratixc

Программист-самоучка и программист-любитель

Добавить комментарий