模板虚函数不能存在原因
模板是编译器在编译期间生成代码。虚函数是程序运行期间计算出调用哪个函数。
一旦程序在运行期间计算出它需要调用一个模板化的虚函数,汇编已经生成了,编译器不能再生成合适的实例了。因此,你不能使用模板虚函数。
不过,有一些强大且有趣的技术起源于结合多态和模板,尤其是所谓的 type erasure
c++模板的解释:
成员函数模板不能被声明为virtual。这个约束是强制的,因为虚函数的通常实现是使用固定大小的虚函数表,每个虚函数有一个入口。然而,模板函数的实例数不是固定的,直到整个程序被编译一遍。