Простий факт полягає в тому, що багато хто, якщо не більшість користувачів C ++ навряд чи можуть зрозуміти, що vectorкраще, ніж mallocі free, тому кількість тих, хто не тільки може оцінити, але впровадити вдосконалене метапрограмування шаблонів, не дуже велика. Це означає, що навіть якби це було добре для 90% ситуацій, ви побачили б це набагато менше, просто тому, що люди не знають про нього або як ним користуватися.
Тим НЕ менше, віртуальні функції дійсно мають перевагу, а саме, віртуальні функції набагато простіше у використанні , ніж CRTP. Шаблони C ++ - горезвісні тим, що бути кучками практично нічого і всього, і модель включення відсмоктує кулі.
Однак вони [віртуальні функції] явно повільніші та менш потужні. Наприклад, я зараз пишу код за допомогою CRTP, де ви успадковуєте перевантаження оператора для використання з шаблонами виразів. Неможливо, щоб віртуальні функції могли змусити це працювати.