为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕沐林林 2019-06-24 15:46:52
类成员函数模板可以是虚拟的吗?我听说C+类成员函数模板不能是虚拟的。这是真的吗?如果它们可以是虚拟的,那么在一个场景中使用这样一个函数的例子是什么呢?
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

模板都是关于编译器生成代码的编译时..虚拟函数都是关于运行时系统,确定要调用哪个函数。运行时间.

一旦运行时系统计算出它需要调用一个经过模板化的虚拟函数,编译就全部完成,编译器就不能再生成适当的实例了。因此,您不能有虚拟成员函数模板。

然而,有一些强大而有趣的技术来自于将多态性和模板结合在一起,特别是所谓的模板。类型擦除.


查看完整回答
反对 回复 2019-06-24
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

C+现在不允许虚拟模板成员函数。最可能的原因是实现它的复杂性。Rajendra给出了为什么现在不能这样做的很好的理由,但是如果对标准进行合理的修改,这是可能的。特别是,如果考虑虚拟函数调用的位置,计算模板函数的实例化数量和构建vtable似乎很困难。标准人们现在还有很多其他的事情要做,C+1x也是编译器编写人员的大量工作。

何时需要模板成员函数?有一次,我遇到这样的情况,我试图用纯虚拟基类重构层次结构。这是一种执行不同战略的糟糕风格。我想将其中一个虚拟函数的参数更改为数字类型,而不是重载成员函数,并覆盖所有子类中的每个重载,我尝试使用虚拟模板函数(并且必须发现它们不存在)。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 646 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信