模板的早期绑定(bind)和虚函数的后期绑定(bind)。因此,模板包含虚函数是否安全?
template<typename T>
class base {
public:
T data;
virtual void fn(T t){}
};
最佳答案
绝对安全。一旦实例化了类模板,它就会像其他类一样成为普通类。
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()
我还要指出的是,虽然在类模板中允许使用虚函数,但在类内部不允许使用虚函数模板(如下所示):
class A
{
template<typename T>
virtual void f(); //error: virtual function template is not allowed
};
关于c++ - 如果模板包含虚函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962570/