我们知道 C++ 不允许在类中使用模板化虚函数。有谁知道为什么要这样限制?
最佳答案
简短回答:虚函数是指直到运行时才知道谁调用了谁,此时从一组已编译的候选函数中挑选出一个函数。函数模板 OTOH 是关于在编译时从调用方创建任意数量的不同函数(使用在编写被调用方时甚至可能不知道的类型)。那就是不匹配。
稍微长一点的答案:虚函数是使用额外的间接方式(程序员的通用通用疗法)实现的,通常实现为函数指针表(所谓的虚函数表,通常缩写为“vtable”)。如果您正在调用虚函数,运行时系统将从表中选择正确的函数。如果存在虚函数模板,运行时系统将不得不使用准确的模板参数找到已编译模板实例的地址。由于类的设计者无法提供从无限的可能参数集创建的任意数量的函数模板实例,因此这是行不通的。
关于c++ - 模板化虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277650/