考慮下面的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);
}
我得到這樣的警告:
$ 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){}
^
現在..我確實隱藏Bar::handle
和我這樣做故意的。
有沒有辦法避免壓制警告,同時得到這個?
沒有必要說g++
根本就不抱怨。
你不應該故意這樣做。你打敗了多態的意圖。如果你不想要多態,請使用封裝。 –
我看不到你的觀點,你能舉個例子嗎?我發現這是唯一的答案在這裏給出(http://stackoverflow.com/questions/18515183/c-overloaded-virtual-function-warning-by-clang),絕對看起來更像是一個藉口,而不是一個真正的動機。 我很樂意避免刪除警告,但不想因爲叮噹想阻止我輸入錯誤而使用代碼。 –
句柄的定義在錯誤的地方。多態基類迫使所有派生類實現基類中的所有方法。所以從BarIf中刪除handle(),因爲你不需要它 - 或者從別的東西中派生Zoo –