Метапрограммирование - это просто еще один инструмент в наборе инструментов (C ++) для программистов - у него много замечательных приложений, но, как и все, его можно использовать неправильно или использовать слишком много. Я думаю, что у него плохая репутация с точки зрения «сложного в использовании», и я думаю, что это происходит главным образом из-за того, что он является значительным дополнением к языку и поэтому требует изучения.
В качестве примера реального использования; Я использовал шаблонное метапрограммирование для реализации утверждений компиляции и библиотек shim в прошлом; реализовать их без шаблонов было бы либо невозможно, либо требовалось бы значительно больше кода, чем мне приходилось писать.
В случае библиотеки shim она могла бы быть реализована в классической объектно-ориентированной манере, которая могла бы быть спроектирована так, чтобы иметь такой же (низкий) уровень дублирования кода, как шаблонная реализация; однако производительность во время выполнения была бы значительно хуже.
Если вы хотите увидеть несколько хороших примеров того, как его можно использовать, я предлагаю вам прочитать Modern C ++ Design от Андрея Александреску (на сайте издателя есть пример главы ) ) - ИМО, это одна из лучших книг на эту тему.