c++ - 模板化虚函数

标签 c++

我们知道 C++ 不允许在类中使用模板化虚函数。有谁知道为什么要这样限制?

最佳答案

简短回答:虚函数是指直到运行时才知道谁调用了谁,此时从一组已编译的候选函数中挑选出一个函数。函数模板 OTOH 是关于在编译时从调用方创建任意数量的不同函数(使用在编写被调用方时甚至可能不知道的类型)。那就是不匹配。

稍微长一点的答案:虚函数是使用额外的间接方式(程序员的通用通用疗法)实现的,通常实现为函数指针表(所谓的虚函数表,通常缩写为“vtable”)。如果您正在调用虚函数,运行时系统将从表中选择正确的函数。如果存在虚函数模板,运行时系统将不得不使用准确的模板参数找到已编译模板实例的地址。由于类的设计者无法提供从无限的可能参数集创建的任意数量的函数模板实例,因此这是行不通的。

关于c++ - 模板化虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277650/

相关文章:

c++ - STL中范围解析运算符的使用困惑

c++ - 声明后调用构造函数

c++ - 如何使回调全局化以便我可以将它用于其他函数?

c++ - 来自设备纹理阵列的 NVIDIA CUDA 视频编码器 (NVCUVENC) 输入

c++ - 创建一个类来存储线程并调用它们

c++ - 如何在 BackgroundSubtractorMOG2 中禁用阴影跟踪?

c++ - 在预处理器指令中使用 openmp 时出错

c++ - 使用指针的二次方程问题

c++ - C++ 中的 << 运算符是什么?

c++ - 对象数组 C++