Если вы определяете шаблонную функцию C ++, для каждой комбинации типов аргументов шаблона создается новая реализация функции. Таким образом, одна функция в исходном коде может быть одной или несколькими функциями в машинном коде. Вот что помогает сделать их быстрыми.
Теперь компилятор определяет, какие версии вашей функции следует генерировать, как она вызывается. Если int
никогда не является параметром типа, компилятор не должен генерировать реализацию. Теперь, если вы делаете виртуальный вызов, становится трудно выяснить, как он используется, и может случиться так, что определение функции отсутствует в заголовочном файле при компиляции функции, которая использует функцию шаблона. Без исходного кода функции компилятор не может создать скомпилированную функцию.
Есть несколько других недостатков, с которыми вы сталкиваетесь, когда C ++ разрешает виртуальные функции шаблонов. Например, как обычно реализуются виртуальные функции.
И это, вероятно, причина того, что C ++ не позволяет этого. Вы можете подумать, что вам это нужно, но, возможно, есть другой способ, который, я уверен, люди помогут вам найти, если вы дадите нам немного больше подробностей о требованиях этого фрагмента кода.