解决clang-12 overloaded-virtual warning
solve clang-12 overloaded-virtual warning
下面的代码给出了 clang-12 警告:
warning: 'foo::TIFFFormat::encodePixels' hides overloaded virtual function [-Woverloaded-virtual]
如何解决此警告所描述的问题?
namespace foo {
struct bar {
int k;
};
class IImageFormat
{
public:
virtual ~IImageFormat() = default;
virtual bool encodePixels(void) = 0;
virtual bool encodePixels(bar pixels) = 0;
};
class ImageFormat : public IImageFormat
{
public:
bool encodePixels(bar pixels) override;
};
bool ImageFormat::encodePixels(bar pixels){
(void)pixels;
return false;
}
class TIFFFormat : public ImageFormat
{
public:
bool encodePixels() override;
};
bool TIFFFormat::encodePixels(){
return false;
}
}
foo::TIFFFormat tf;
在派生 class 中声明两个重载之一,但不声明另一个,将导致从派生 class 中查找名称仅找到在派生 [=22= 中声明的那个].
因此,使用您的代码,您将无法调用例如tf.encodePixels(foo::bar{})
.
如果您不想在派生的 class 中重复所有重载,您可以通过 using
声明在 TIFFFormat
:
中导入所有重载
using ImageFormat::encodePixels;
如果您不关心或不打算从派生 class 访问过载,则警告与您无关。
下面的代码给出了 clang-12 警告:
warning: 'foo::TIFFFormat::encodePixels' hides overloaded virtual function [-Woverloaded-virtual]
如何解决此警告所描述的问题?
namespace foo {
struct bar {
int k;
};
class IImageFormat
{
public:
virtual ~IImageFormat() = default;
virtual bool encodePixels(void) = 0;
virtual bool encodePixels(bar pixels) = 0;
};
class ImageFormat : public IImageFormat
{
public:
bool encodePixels(bar pixels) override;
};
bool ImageFormat::encodePixels(bar pixels){
(void)pixels;
return false;
}
class TIFFFormat : public ImageFormat
{
public:
bool encodePixels() override;
};
bool TIFFFormat::encodePixels(){
return false;
}
}
foo::TIFFFormat tf;
在派生 class 中声明两个重载之一,但不声明另一个,将导致从派生 class 中查找名称仅找到在派生 [=22= 中声明的那个].
因此,使用您的代码,您将无法调用例如tf.encodePixels(foo::bar{})
.
如果您不想在派生的 class 中重复所有重载,您可以通过 using
声明在 TIFFFormat
:
using ImageFormat::encodePixels;
如果您不关心或不打算从派生 class 访问过载,则警告与您无关。