有类似如下代码:
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;
...
}
...
}