解决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 访问过载,则警告与您无关。