Любопытно повторяющийся шаблон шаблона (CRTP) возникает, когда у дочернего класса есть родительский класс, который является специализацией шаблона для этого класса.
На основе параметра, который является передается во время вызова функции, компилятор определяет, какая функция будет вызвана — это называется полиморфизмом времени компиляции . CRTP в основном используется для реализации полиморфизма во время компиляции.
Синтаксис
Вот как выглядит CRTP:
Синтаксис в C ++
Реализация
Следующий код использует CRTP для реализации полиморфизма времени компиляции :
#include using namespace std;//Обратите внимание, что во время компиляции//полиморфизм не требуется никаких виртуальных функций. шаблон //Это родительский класс. Требуется шаблонный параметрclass Citrus {public: void description () {static_cast (this) -> description (); }};//Это дочерний класс. Подпись CRTP: Дочерний класс передается//как параметр шаблона родительскому классу. Class Clementine: public Citrus {public: void description () {cout {public: void description () {cout void fruit_description (Citrus citrus) {citrus.description ();} int main () {Clementine clementine; Лайм-лайм; fruit_description (клементин); fruit_description (лайм); return 0;}