Я только начал свое путешествие как разработчик C ++, и недавно я исследовал тему под названием метапрограммирование. До сих пор я прошел много информации по этой теме, и у меня мало вопросов.
Использование Reflection в c ++: возможно ли это? Согласно моему пониманию, рефлексия - это метод метапрограммирования, который обладает способностью манипулировать состоянием программы, и его манипулирование может быть самоанализом или интроцессией.
В чем разница между отражающей архитектурой и архитектурой метауровня? В какую категорию попадает архитектура метапрограммирования?
Мета-программирование имеет два уровня: мета-уровень и базовый уровень. В моем понимании объектная программа или исследуемая система является базовым уровнем, а метапрограмма, которая будет работать над исследуемой системой, является метауровнем. Я прав?
Также помогите мне, предоставив некоторые рекомендации по работе над шаблонным метапрограммированием в C ++.
Можете ли вы предложить мне несколько реальных примеров, которые я могу найти, чтобы получить практические навыки в этой технике программирования?
Ответы:
Метапрограммирование просто означает, что у вас есть средства для написания кода, который пишет другой код (в широком смысле). C ++ делает это через механизм шаблонов, который в основном является типобезопасным языком макросов. Вполне возможно просто применить шаг раскрытия шаблона, и в результате получится действительный код C ++, не содержащий шаблонов.
Отражение - это способность языка программирования и / или среды выполнения проверять (и часто изменять) элементы своего языка во время выполнения. Как правило, отражающие языки предлагают структуры данных, которые представляют языковые элементы, такие как классы, методы, переменные, параметры и т. Д., А также процедуры или классы для их проверки, изменения и создания. Возможность модификации делает отражение типом метапрограммирования, поскольку позволяет писать код, который генерирует другой код.
Другие примеры метапрограммирования включают генераторы кода, самоизменяющиеся двоичные файлы (хотя сегодня они уже не так популярны, как два десятилетия назад), макросы C; Можно утверждать, что карри и подобные методы функционального программирования также являются своего рода метапрограммированием.
источник
2-3. Я не знаю - ждите другого ответа, который поможет с этим :-)
Мета-программирование с использованием шаблонов C ++ является очень мощным, но и сложным. Расширение шаблона требует функционального стиля программирования, а не императивного программирования, которое использует C ++. Если у вас нет опыта работы с функциональным программированием, я бы порекомендовал вам сделать обход и выучить базовый шрифт, хаскель или схему.
источник