virtual function override intended?解决

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

virtual function override intended?

有类似如下代码:

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;
        ...
     }
     ...
 }

原文链接:https://blog.csdn.net/XCCCCZ/article/details/117128710

我是在yololayer.h加上这个代码也有效:

        void configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) TRT_NOEXCEPT override;
        using IPluginV2Ext::configurePlugin;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值