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