Для меня метапрограммирование - это «программа, которая пишет программы».
Метапрограммирование особенно полезно для повторного использования, поскольку оно поддерживает обобщение: вы можете определить семейство изпонятия, которые принадлежат определенному шаблону .Затем с помощью изменчивость вы можете применить эту концепцию в похожих, но разных сценариях.
Простейшим примером являются геттеры и сеттеры Java, упомянутые @Sjoerd:
Оба геттераи установщик следует четко определенному шаблону : получатель возвращает член класса, а установщик устанавливает значение члена класса.Обычно вы создаете так называемый шаблон , чтобы разрешить применение и повторное использование этого конкретного шаблона.Принцип работы шаблона зависит от используемого подхода метапрограммирования / генерации кода.
Если вы хотите, чтобы метод получения или получения работал немного по-другому, вы можете добавить некоторые параметры в шаблон.Это изменчивость .Например, если вы хотите добавить дополнительный код обработки при получении / настройке, вы можете добавить блок кода в качестве параметра изменчивости.Смешивать пользовательский код и сгенерированный код может быть сложно. ABSE в настоящее время является единственным подходом к MDSD, который, как я знаю, изначально поддерживает пользовательский код непосредственно в качестве параметра шаблона.