2014-02-12 21 views
6
virtual void myFunc(int& a, int& b) {} 

我收到有關未使用變量的警告,但我不想在基類中對它們做任何事情。 我想讓派生類實現它們,如果他們想要,並且不做任何事情,如果他們沒有實現它們。除了在編譯器上放置標誌之外,我能做些什麼來阻止警告?C++虛函數的參數在未使用時會得到警告

+0

根據你的類,它可能會使它聲明爲抽象函數:'虛擬無效myFunc(int&a,int&b)= 0;'。 –

+0

我不想去執行時,從它派生的任何類。 – gda2004

+0

正如我所說的 - 這取決於你的類(也許我應該說:「這取決於你的通用設計」) –

回答

20

只要不給他們一個名字:

virtual void myFunc(int&, int&); 
+0

+1,但你最喜歡的歌曲鏈接斷開:( – Maroun

+0

@ᴍarounᴍaroun謝謝,固定:) – jrok

+0

爲什麼不對其進行命名擺脫警告? – gda2004

4

嘗試定義的功能,無需參數名稱作爲

virtual void myFunc(int& ,int& ) 
{ 

} 

還要考慮的可能性TTO使基類的抽象

virtual void myFunc(int& a,int& b) = 0; 

如果它只是簡單地說明接口。

8

既然你不想使用它們,你可以發出參數名稱。

然而,不是刪除他們完全是有時更多有用的評論它們像這樣:

virtual void myFunc(int& /* a */ , int& /* b */) 
{ 
} 

這樣你仍然可以看到該參數的目的是通過觀察註釋掉名。如果將實現放在標題中,這將特別有用,因爲它將是唯一提及參數名稱的地方。

4

您有幾種方式來無聲此警告

  • 從聲明/定義中刪除他們:

    virtual void myFunc(int& /* a */ , int& /* b */) {} 
    

    這種解決方案可能會引起一些警告一些工具如Doxygen的...

  • 使用技巧來判斷參數是未使用的:

    template <typename T> void unusedArg(const T&) {} // Helper function. 
    
    // In the class 
    virtual void myFunc(int& a, int& b) { unusedArg(a); unusedArg(b); } 
    

    或C++ 11:

    template <typename ... Ts> void unusedArgs(const Ts...&) {} // Helper function. 
    
    // In the class 
    virtual void myFunc(int& a, int& b) { unusedArgs(a, b); } // C++11 
    
  • 在C++ 17,則還可以使用屬性[[maybe_unused]]

    // In the class 
    virtual void myFunc([[maybe_unused]] int& a, [maybe_unused]] int& b) {} 
    
+0

如果您正在使用C++ 11,我想你會用完美轉發(&&)。 – Phil1970

0

在一些編譯器,則可以簡單地寫變量名稱爲「無操作」語句。

virtual void myFunc(int& a, int& b) 
{ 
    a; // unused variable 
    b; 
} 

但是,爲了支持其他編譯器和使意圖明確,你可以使用宏或函數unused_argument講清楚。

如果這不適用於您的編譯器,我認爲做sizeof(a);會起作用。

相關問題