Очередная серия про то, как C++ные шаблоны позволяют бороться с копипастой. Опять в виде статьи на Хабре: "Немного C++ной шаблонной магии и CRTP для контроля за корректностью действий программиста в компайл-тайм". На Хабре потому, что нужен PR. Какой-никакой, но PR. И нужен.
Сказать свое "Фи", "Не нужно", "За такое нужно руки отрывать" или "Когда я вижу такой код, то хочется обнять и плакать" можно как в комментариях на Хабре, так и здесь. Но меня вы все равно не переубедите :) Так что лучше, если вы где-нибудь сделаете репост ссылки на статью со своими уничижительными комментариями. Мол, вон как хардкорные C++ники упарываются, нидайбох дойти до жизни такой ;)
В статье обсуждается самая простая реализация, в которой методы clone_if_necessary приходится дублировать. Вот здесь можно найти более продвинутый вариант, с переиспользованием реализации clone_if_necessary. Однако, чтобы его получить, пришлось изменить следующее:
- в basic_holder_t потребовалось два метода data (константный и неконстантный), причем оба эти метода сделаны публичными (чтобы не трахаться с friend-ами для шаблонов);
- методы clone_if_necessary в примеси cloner_t оказались статическими.
Поиграться в on-line с продвинутой версией можно здесь.
PS. Предыдущая часть серии "Шаблоны против копипасты" здесь.