类成员函数模板可以是虚拟的吗?

类成员函数模板可以是虚拟的吗?

我听说C+类成员函数模板不能是虚拟的。这是真的吗?

如果它们可以是虚拟的,那么在一个场景中使用这样一个函数的例子是什么呢?


慕沐林林
浏览 648回答 3
3回答

智慧大石

模板都是关于编译器生成代码的编译时..虚拟函数都是关于运行时系统,确定要调用哪个函数。运行时间.一旦运行时系统计算出它需要调用一个经过模板化的虚拟函数,编译就全部完成,编译器就不能再生成适当的实例了。因此,您不能有虚拟成员函数模板。然而,有一些强大而有趣的技术来自于将多态性和模板结合在一起,特别是所谓的模板。类型擦除.

慕勒3428872

C+现在不允许虚拟模板成员函数。最可能的原因是实现它的复杂性。Rajendra给出了为什么现在不能这样做的很好的理由,但是如果对标准进行合理的修改,这是可能的。特别是,如果考虑虚拟函数调用的位置,计算模板函数的实例化数量和构建vtable似乎很困难。标准人们现在还有很多其他的事情要做,C+1x也是编译器编写人员的大量工作。何时需要模板成员函数?有一次,我遇到这样的情况,我试图用纯虚拟基类重构层次结构。这是一种执行不同战略的糟糕风格。我想将其中一个虚拟函数的参数更改为数字类型,而不是重载成员函数,并覆盖所有子类中的每个重载,我尝试使用虚拟模板函数(并且必须发现它们不存在)。
打开App,查看更多内容
随时随地看视频慕课网APP