为什么C++的成员模板函数不能是 virtual

参考资料

自己分析

  • 编译器在编译某个单元时,一定要知道相关类的定义才可以

模版可以作为非虚成员函数

  • 成员函数,也就是代码,存储在代码段;是与具体的对象无关的;其不会影响类实例化对象的大小
  • 借助name mangling,类中成员函数,类的作用基本就是给该函数进行name mangling提供名称前缀
  • 因此,当在某个编译单元中实例化某个模版成员函数时,只需要对其进行name mangling;为了防止重定义,或许会添加弱符号特性
  • 最后交给链接器就可以
    • 多个弱符号,选择占用空间最大的一个

不可以为虚函数

  • 某个编译单元内,遇到模版函数实例化,不知道该虚函数在虚表中的位置!!!
  • 如果编译器维护cnt信息,或许可以为虚函数
    • 但是对并行编译提出了巨大的挑战

为什么C++的成员模板函数不能是 virtual
http://example.com/2024/08/22/CPP/为什么C++的成员模板函数不能是 virtual/
作者
Cyokeo
发布于
2024年8月22日
许可协议