当模板类的虚拟成员函数实例化时?

时间:2010-08-14 15:11:49

标签: c++ templates

我知道模板类的普通成员函数只要第一次使用它就会被实例化。但是这不能用于虚拟成员函数,因为它可以通过基类指针访问。这意味着只要实例化tmeplate类,就会实例化虚拟成员函数?如果不是的话?

3 个答案:

答案 0 :(得分:5)

C ++ 03中的

14.7.1/9

  

实现不应隐式实例化函数模板,成员模板,非虚拟成员函数,成员类或不需要实例化的类模板的静态数据成员。如果虚拟成员函数不会被实例化,则实现是否隐式实例化类模板的虚拟成员函数是未指定的。

答案 1 :(得分:1)

这是实施定义。

但通常在实例化模板类时,会生成新类类型的所有成员。

答案 2 :(得分:1)

根据C ++标准14.6.4.1/4:

  

如果虚函数是隐式的   实例化,它的观点   实例化紧随其后   其实例化的重点   封闭类模板   专业化。