Кажется, что вопрос об интервью спрашивает о предпочтениях (и ваших соображениях). Я бы предпочел интерфейсы (виртуальные методы) для простоты создания макетов для модульного тестирования. Мы можем использовать шаблон для них, но это громоздко (потребитель должен быть шаблонным). Если профилирование не приводит к снижению скорости при поиске в vtable, предпочтительнее, чем пересмешивать / тестировать не виртуальные методы.
Кроме того, введите стирание. Я не думаю, что это может быть реализовано вообще с использованием шаблонов. Стирание типа можно условно представить как void ptr и указатели на функции, которые можно легко реализовать с помощью интерфейсов + виртуальных методов.
Для шаблонов требуется реализация кода, чтобы быть доступными. Я полагаю, что виртуальные методы интерфейса могут быть вызваны на дочернем ptr только с его двоичным (объектным) файлом.
Не уверен, что разрастание кода с шаблоном является проблемой современных компиляторов, но если размер исполняемого файла значительно увеличивается, это может быть проблемой во встроенных системах с ограниченным объемом памяти, и они не предпочитают использовать шаблоны.