Templates and generic programming
T.83
Не объявляйте шаблон функции-члена виртуальным
Причина
C++ не поддерживает это. Если бы поддерживал, vtbl нельзя было бы сгенерировать до стадии компоновки. И в общем случае реализации должны поддерживать динамическое связывание.
Пример (плохой)
class Shape {
// ...
template<class T>
virtual bool intersect(T* p); // error: template cannot be virtual
};
Примечание
Нам нужно это правило, потому что люди продолжают задавать этот вопрос.
Альтернатива
Двойная диспетчеризация, паттерн Visitor, вычисление вызываемой функции.
Контроль
Компилятор сам обрабатывает это.