Вы на самом деле пытаетесь невозможного.
Суть дела проста: virtual
и template
плохо смешиваются.
template
о генерации кода во время компиляции. Вы можете думать об этом как о каком-то макросе с поддержкой типов + несколько уловок для метапрограммирования.
virtual
о решении во время выполнения, и это требует некоторой работы.
virtual
обычно реализуется с использованием виртуальных таблиц (представьте таблицу, в которой перечислены методы). Количество методов должно быть известно во время компиляции и определено в базовом классе.
Однако с вашим требованием нам потребуется виртуальная таблица бесконечного размера, содержащая методы для типов, которые мы еще не видели, и которые будут определены только в ближайшие годы ... к сожалению, это невозможно.
А если бы это было возможно?
Ну, это просто не имело бы смысла. Что происходит, когда я звоню Foo2
с int
? Это не для этого! Следовательно, это нарушает принцип, согласно которому Foo2
реализует все методы из IFoo
.
Итак, было бы лучше, если бы вы указали реальную проблему, чтобы мы могли помочь вам на уровне проектирования, а не на техническом уровне:)