Как стать автором
Обновить

Немного C++ной шаблонной магии и CRTP для контроля за корректностью действий программиста в компайл-тайм

Время на прочтение11 мин
Количество просмотров4.3K
Всего голосов 16: ↑16 и ↓0+16
Комментарии7

Комментарии 7

Вот здесь можно найти более продвинутый вариант, с переиспользованием реализации clone_if_necessary. Однако, чтобы его получить, пришлось изменить следующее:


  • в basic_holder_t потребовалось два метода data (константный и неконстантный), причем оба эти метода сделаны публичными (чтобы не трахаться с friend-ами для шаблонов);
  • методы clone_if_necessary в примеси cloner_t оказались статическими.

Поиграться в on-line с продвинутой версией можно здесь.

НЛО прилетело и опубликовало эту надпись здесь
Спасибо!
Если я не ошибаюсь, то сейчас разрешен как переход undefined -> defined, так и defined -> undefined. Нет здесь возможности выстрелить себе в ногу позже? Можно некоторым усложнением clone_if_necessary добиться того, что переход будет возможен только в одну сторону.
сейчас разрешен как переход undefined -> defined, так и defined -> undefined

Практически да. Но переходы undefined -> defined инициируют только некоторые сеттеры. Остальные сеттеры возвращают ссылку на текущий тип без инициирования трансформации. Поэтому на практике переходов defined -> undefined нет.


Чтобы такой переход возник, необходимо, чтобы в каком-то сеттере разработчик явным образом вызвал clone_if_necessary, да еще и указал там undefined. Это уже намеренное поведение и вряд ли есть смысл от него защищаться.

НЛО прилетело и опубликовало эту надпись здесь
> Можно ж просто

Да, действительно. Можно и так.

> А ещё можно там с &&-qualified members поиграться и мувать по возможности…

А это специально не делалось, чтобы пример не усложнять.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории