Если с «шаблонной природой» широко распространяющихся вещей все в порядке, то шаблоны («типизированная утка во время компиляции») могут дать вам невероятную скорость (избегая «уровня косвенности», который неявен при вызове виртуальной функции) ) хотя, может быть, и с некоторыми затратами памяти (теоретически, хорошие реализации на C ++ могли бы избежать затрат памяти, связанных с шаблонами, но я не уверен, что такие высококачественные компиляторы обязательно будут доступны на все платформы, на которые нужно портировать ;-). Так что, по крайней мере, прагматично, это что-то вроде компромисса между скоростью и памятью. Если операции, которые вы выполняете, настолько медленны, как ввод-вывод, то, возможно, относительно небольшое увеличение скорости от отказа от виртуального вызова не очень важно для вашего варианта использования.