如果模板包含虚函数是否安全? [英] Is it safe if a template contains virtual function?

查看:27
本文介绍了如果模板包含虚函数是否安全?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

模板的早期绑定和虚函数的后期绑定.因此,如果模板包含虚函数是否安全?

Early binding for template and late binding for virtual function. Therefore, is it safe if a template contains virtual function?

template<typename T> 
class base {
public:
    T data;
    virtual void fn(T t){}
};

推荐答案

它是完全安全的.一旦实例化了类模板,它就变成了普通类,就像其他类一样.

It is completely safe. Once you instantiate the class template, it becomes normal class just like other classes.

template<typename T> 
class base {
public:
    T data;
    virtual void fn(T t){}
};


class derived : base<int> {
public:
    virtual void fn(int t){} //override
};

base<int> *pBase = new derived();
pBase->fn(10); //calls derived::fn()

我还要指出,虽然在类模板中允许使用虚函数,但在类中不允许使用虚函数模板(如下所示):

I would also like to point out that while it is allowed virtual function in a class template, it is not allowed virtual function template inside a class (as shown below):

class A
{
   template<typename T>
   virtual void f(); //error: virtual function template is not allowed
};

这篇关于如果模板包含虚函数是否安全?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆