Ric*_*rin 0 c++ hidden warnings overloading clang
考虑以下C++示例main.cpp文件:
class FooIf
{
public:
virtual int handle(char *req, char *res) = 0;
};
class BarIf
{
public:
virtual void handle(char *msg) = 0;
};
class Bar : private BarIf
{
private:
void handle(char * msg){}
};
class Zoo : public FooIf, public Bar
{
public:
using FooIf::handle;
public:
int handle(char *req, char *res){ return (0); }
};
int main(){
Zoo zoo;
return (0);
}
Run Code Online (Sandbox Code Playgroud)
我收到这个警告:
$ clang++ -ggdb -c main.cpp -Wall
main.cpp:23:6: warning: 'Zoo::handle' hides overloaded virtual function [-Woverloaded-virtual]
int handle(char *req, char *res){ return (0); }
^
main.cpp:17:7: note: hidden overloaded virtual function 'Bar::handle' declared here: different number of parameters (1 vs 2)
void handle(char * msg){}
^
Run Code Online (Sandbox Code Playgroud)
现在..我确实藏了,Bar::handle而且我是故意这样做的.
有没有办法避免在绕过它时抑制警告?
没有必要说g++完全没有抱怨这一点.
你应该考虑不同的设计.如果你真的需要这个,这似乎是代码气味/设计问题.
如果(无论出于何种原因)您真的想这样做,您可以在特定地点关闭警告.有关信息,请参阅此处http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas
在你的情况下,这将是这样的
class Zoo : public FooIf, public Bar
{
public:
using FooIf::handle;
public:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Woverloaded-virtual"
int handle(char *req, char *res){ return (0); }
#pragma clang diagnostic pop
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |