Метапрограммирование шаблонов по сути является злоупотреблением механизмом шаблонов. Я имею в виду, что вы получаете в основном то, что ожидаете от функции, которая была незапланированным побочным эффектом - это беспорядок и (хотя инструменты становятся лучше) реальная боль в заднице, потому что язык не поддержать вас в этом (я должен заметить, что мой опыт в этой области устарел, поскольку я по сути разочаровался в подходе. Хотя я не слышал о каких-либо значительных успехах)
Шутки с этим примерно в 98 году заставили меня искать лучшие решения. Я мог бы написать полезные системы, которые полагались на это, но они были адскими. Из-за того, что я начал копаться, я попал в Common Lisp. Конечно, механизм шаблонов завершен по Тьюрингу, но, опять же, он является интеркальным.
Common Lisp выполняет метапрограммирование `правильно '. Пока вы делаете это, у вас есть все возможности языка, нет специального синтаксиса, и поскольку язык очень динамичен, вы можете делать с ним больше.
Есть и другие варианты, конечно. Никакой другой язык, который я использовал, не делает метапрограммирование лучше, чем Lisp, поэтому я использую его для исследовательского кода. Хотя есть много причин, по которым вы можете попробовать что-то другое, но это все будет компромиссом. Вы можете взглянуть на Haskell / ML / OCaml и т. Д. Во многих функциональных языках есть что-то похожее на мощь макросов Lisp. Вы можете найти некоторые вещи, нацеленные на .NET, но все они довольно незначительны (с точки зрения базы пользователей и т. Д.). Ни один из крупных игроков в промышленно используемых языках не имеет ничего подобного, на самом деле.