c++ - 如果模板包含虚函数是否安全?

标签 c++ virtual

模板的早期绑定(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/

相关文章:

c++ - 每隔一段时间执行一次操作

c++ - 来自普通函数的虚函数调用

c++ - 类有虚方法但非虚析构函数C++

具有多父多态层次结构的 C++ VTable 实现

c++ - 我应该将我的派生类析构函数标记为虚拟/覆盖吗?

c++ - 处理异常后阻止线程在分离时调用 std::terminate()

c++ - 如何使用 Mako SDK 在文档页面的给定区域内平铺图像?

c++ - C 位标志枚举应如何转换为 C++?

c++ - 这个简单的代码会导致内存泄漏吗?

c++ - 在 C++ 中反转字符串