Что это значит при использовании шаблона в C ++ - PullRequest
4 голосов
/ 04 ноября 2010

Недавно я встретил что-то в чужом исходном коде. Я не совсем понимаю шаблон в C ++. Не могли бы вы мне помочь?

struct my_grammar : public grammar<my_grammar>
{
    ...
};

Почему my_grammar можно использовать в качестве параметра типа, подобного этому?

С наилучшими пожеланиями,

1 Ответ

11 голосов
/ 04 ноября 2010

Эта идиома называется Curious Recurring Template Pattern - см. http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern. В общем, она предоставляет производный класс в качестве политики для базового класса, в стиле, сходном с политикой, используемой в книге Современного дизайна C ++ Александреску рекомендуемые). Таким образом, базовый класс может использовать аспекты производного класса - типы, константы, методы - все они разрешаются во время компиляции.

...