Практическое применения метапрограммирования
От: SpiritFire  
Дата: 07.12.11 14:46
Оценка: 3 (1)
Недавно начал изучение "Современного проектирования на С++" Александреску. Соответственно, смотрел Loki, немного boost::mpl. Местами сложно, местами непривычно, но очень интересно.

Возникло несколько вопросов:

1. С чего начать изучение boost::mpl с надеждой на практическое применение?
Открыв бустовскую документацию по mpl вырвалось что-то вроде "<censored> и за что же браться?". Очень много всего, но 90% того, что я увидел, с моей точки зрения (могу ошибаться по неопытности) неприменимо в коммерческом проекте — либо слишком сложно для написания, понимания и сопровождения. Например, вывод всех символов 16-ричной системы счисления в константную строку во время компиляции я сделаю за 10 минут вручную (static const std::wstring A::digits="..."), или за 120 минут на mpl. Когда я уйду в отпуск, если это придётся подправить другому программисту — "хардкод" он подправит за 10 минут, а boost::mpl за 60. Если единственный аргумент в этом примере за mpl — это "идеологическая правильность", то выбор инструмента для души и для продакшена очевиден. Для души — mpl дома на коленке, поигрался и забыл, для продакшена — хардкод и беремся за следующую фичу.

Из того, что попалось на глаза, полезным показался if_ и if_c, sequence (для оптимизации) и семпл из .../libs/mpl/examples/integer.cpp — битовая маска заданного размера.
// в битовой маске как-то так:
typedef integer<32>::type mask32;
typedef integer<100>::type mask100;
static_assert( boost::is_same<mask32, uint32_t>);


Само собой, boost/std::function, bind, lambda я как mpl не рассматриваю. Это вещи для меня очень приятные и полезные.

2. Хотелось бы спросить у более опытных коллег, в каких случаях (можно с примерами) метапрограммирование на плюсах упростило вам жизнь?
Поиск по форуму выдал огромную кучу информации, но ознакомившись с ней, я так и не понял, кто получил от использования mpl или Loki радость и облегчение, а кто — гордость за то, что "мы сами не верим, что смогли это сделать, не дай бог еще раз такой дизайн...".


Если кто-то поделится опытом не только "как надо", а и как "не надо" — буду тоже очень признателен, тема для меня актуальна и очень интересна.
Особенно интересует опыт использования в небиблиотечном коде. То есть, в обычном проекте, в котором немного повторно использованного кода, написанного рукастым или головастым девелопером, немного говнокода (куда ж без него? Работает и ладно, не досуг, заказчик просит новые фичи), заказчики сами не девелоперы и красоту настоящего С++ им не понять
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.