хабре я почитал, в чем его преимущества для расширения функциональности, мне понятно. Enable_shared_from_this наглядный пример. Тем не менее, его также частенько упоминают, как замену шаблонному методу, без динамического полиморфизма, но более быструю. Но по сути, в этой ситуации точно такого же поведения можно добиться композицией. И я не вижу никакого преимущества CRTP перед вариантом с композицией, кроме того, что из-за композиции класс раздует из-за байтового выравнивания. Если мы гонимся за до фига быстрым шаблонным методом, то зачем нам CRTP нужен? Почему так лучше, чем просто композицию использовать?
CRTP нужен для статического полиморфизма, чтобы в базе описать инварианты. Но вообще он не очень то часто нужен, проще эти инварианты писать внешними функциями с диспетчеризацией по типам.
Обсуждают сегодня