Возможно, вы немного обдумываете это.Само название «любопытно повторяющееся ...» подразумевает, что автор или тот, кто пометил его как «CRTP», заметил, что многие места уже используют эту технику, поэтому практика создания параметра шаблона базового класса в качестве самого производного класса была известна ранее.термин был придуман.
В целом, CRTP не так уж и много.Он настолько популярен, потому что позволяет воссоздать поведение виртуальных функций, фактически не имея виртуальных функций, и проблема с действительными виртуальными функциями заключается в том, что а) они требуют дополнительного косвенного обращения (немного больше инструкций по сборке, не такая уж большая проблема) и б) большинствовремени они не могут быть оптимизированы компилятором (большая сделка).Вот почему CRTP стал настолько популярным, особенно в библиотечном коде, таком как STL, Boost или ATL, где у вас есть каркасные классы с одно- или двухстрочными методами.Вы получаете быстрый виртуальный вызов за счет отказа от полиморфного поведения, которое в любом случае не требуется много времени.
Если вы считаете, что знакомы с шаблонами C ++ и готовы перейти к следующему шагу,Я предлагаю вам прочитать "Современный дизайн C ++: общее программирование ..." или "Метапрограммирование шаблонов C ++ - Концепции ...".Я уже давно пишу на C ++ и в целом чувствую себя комфортно с чем угодно, но в первый раз, когда я взял одну из этих книг, вещи, которые они показали, меня просто потрясли.
На случай, если вы решитена самом деле, возьмите одну из этих книг, я просто хочу отметить, что мне понравился «Современный дизайн C ++ ...», и он использовал очень человечный подход к не столь простым вещам, он основан на библиотеке Loki, которая, насколькоЯ могу сказать, больше не поддерживается.С другой стороны, другая книга (которую я использовал только в качестве ссылки несколько раз) описывает библиотеку Boost MPL, которая очень жива и здорова.Обе книги рассказывают об одних и тех же методах метапрограммирования (выполнение кода во время компиляции) с использованием шаблонов C ++.