> 文档中心 > TensorRT的IPluginV2IOExt 和 IPluginV2Ext 的configurePlugin() 的virtual function override问题

TensorRT的IPluginV2IOExt 和 IPluginV2Ext 的configurePlugin() 的virtual function override问题

有类似如下代码:

namespace nvinfer1{    class YoloLayerPlugin : public IPluginV2IOExt { ... void configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) override; ...    }    ...}

在编译时总有如下警告:

yololayer.h(85): warning: function "nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const __nv_bool *, const __nv_bool *, nvinfer1::PluginFormat, int)" is hidden by "nvinfer1::YoloLayerPlugin::configurePlugin" -- virtual function override intended?
yololayer.h(85): warning: function "nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const bool *, const bool *, nvinfer1::PluginFormat, int)" is hidden by "nvinfer1::YoloLayerPlugin::configurePlugin" -- virtual function override intended?

为了消除警告,翻看了一下tensorrt相关代码,明白了产生这些警告是怎么回事:

类YoloLayerPlugin 继承IPluginV2IOExt,并且实现了IPluginV2IOExt的虚函数configurePlugin():

class YoloLayerPlugin : public IPluginV2IOExt

从/usr/include/aarch64-linux-gnu/NvInferRuntimeCommon.h里代码看,IPluginV2IOExt继承自IPluginV2Ext,而IPluginV2Ext也有一个同名虚函数configurePlugin():

class IPluginV2IOExt : public IPluginV2Ext{public:    //!    //! \brief Configure the layer.    //!    //! This function is called by the builder prior to initialize(). It provides an opportunity for the layer to make    //! algorithm choices on the basis of I/O PluginTensorDesc and the maximum batch size.    //!    //! \param in The input tensors attributes that are used for configuration.    //! \param nbInput Number of input tensors.    //! \param out The output tensors attributes that are used for configuration.    //! \param nbOutput Number of output tensors.    //!    virtual void configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) TRTNOEXCEPT = 0;...class IPluginV2Ext : public IPluginV2{public:  ...   virtual void configurePlugin(const Dims* inputDims, int nbInputs, const Dims* outputDims,     int nbOutputs, const DataType* inputTypes, const DataType* outputTypes,     const bool* inputIsBroadcast, const bool* outputIsBroadcast, PluginFormat floatFormat, int maxBatchSize) TRTNOEXCEPT = 0; ...

这样的话,IPluginV2Ext::configurePlugin()就被hidden了,要消除这个警告,在类YoloLayerPlugin的定义代码里增加个using IPluginV2Ext::configurePlugin即可解决:

namespace nvinfer1{    class YoloLayerPlugin : public IPluginV2IOExt ... void configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) override; using IPluginV2Ext::configurePlugin; ...     }     ... }

 

 

 

TensorRT的IPluginV2IOExt 和 IPluginV2Ext 的configurePlugin() 的virtual function override问题 创作打卡挑战赛 TensorRT的IPluginV2IOExt 和 IPluginV2Ext 的configurePlugin() 的virtual function override问题 赢取流量/现金/CSDN周边激励大奖