C++避免使用 using 关键字在派生类中进行动态调度

C++ avoiding dynamic dispatch in derived classes with using keyword

本文关键字:派生 动态调度 关键字 using C++      更新时间:2023-10-16

在下面的示例中,我会使用动态调度来调用虚函数吗?

struct Base{
    virtual double fn(){return 3.2;}
};
struct Deri1 : public Base{
    using Base::fn;
}
struct Deri2 : public Base{
    virtual double fn(){return 4.6;}
}

我正在实现的类包含更多信息,但有些我想为某些派生类保留默认值,但在其他派生类中覆盖,上面代码中的 fn() 就是一个例子。基本上,我只是使用基类来避免每次未被覆盖时重写 fn()。这是正确的方法吗?

谢谢!

只要不使用

指针,就可以通过在函数定义中避免使用"virtual"关键字来避免动态调度,如本链接中所述。

这给通用方法和多态性带来了一些复杂性。如果使用动态多态性,则将指向基类的指针传递给方法,在这种情况下,"virtual"关键字对于指针确定要使用的方法是必需的。可以使用模板定义静态多态方法,如以下链接中所述。