我有一个类层次结构,大致如下:
class A
{
protected:
virtual void f(int) = 0;
};
class B
{
protected:
virtual void f(char*) = 0;
};
class DA : A
{
private:
virtual void f(int) override {}
};
class DB : public DA, B
{
private:
virtual void f(char*) override {}
};
当我尝试使用clang(或者gcc)进行编译时,它会给出警告:
<source>:22:18: warning: 'DB::f' hides overloaded virtual function [-Woverloaded-virtual]
virtual void f(char*) override {}
^
<source>:16:18: note: hidden overloaded virtual function 'DA::f' declared here: type mismatch at 1st parameter ('int' vs 'char *')
virtual void f(int) override {}
^
我理解这一点,但它真的应该发出那个警告吗?毕竟,DB
甚至看不到隐藏的函数(这个函数可能仅仅是巧合命名相同)。
如果这个函数不是私有的,我就可以使用它了。
using DA::f;
为了澄清,这个函数是私有的,DB
甚至不知道它的存在,而且肯定不应该暴露出来。
有没有一种方法可以在不停用警告的情况下解决这个问题,即告诉编译器一切都是按照预期设计的?