2010-10-18 71 views
0

我有這個接口。如果我推導出來,是否需要再次指定format attribute?而且,如果一個類Deriv實現此接口,我可以使用Deriv::LT_DEBUG我是否需要指定派生類的屬性?

class Logger 
{ 
    public: 
     enum LogType 
     { 
      LT_DEBUG = 0, 
      LT_WARNING, 
      LT_ERROR, 
      LT_STAT, 
      LT_TEXT 
     }; 

     __attribute__((format(printf, 6, 7))) 
     virtual const char* EHLog(LogType, 
       bool, 
       const char*, 
       int, 
       const char*, 
       ...) = 0; 

     virtual ~Logger(){} 
}; 
+2

我從來沒有見過這樣的事oO – ereOn 2010-10-18 09:04:40

+0

它用來驗證你的函數的參數是否正確。如果你採取可變參數列表。:) – nakiya 2010-10-18 09:10:19

+1

@ereOn http://unixwiz.net/techtips/gnu-c-attributes.html#format – 2010-10-18 09:13:29

回答

0

我找不到它的任何文件,但我想這將__attribute__註釋不會隱式由派生類繼承。
這意味着,如果通過Deriv實例,引用或指針調用EHLog,則格式檢查僅在Deriv::EHLog還指定__attribute__((format))註釋時完成。

我推測的原因是,這種方式編譯器不必更改其名稱查找機制,以應對正在被覆蓋的基類函數的註釋的可能性__attribute__


至於第二個問題:是的,您可以使用派生類的限定條件來訪問基類中的名稱。 Deriv::LT_DEBUG應該工作並解析爲與Logger::LT_DEBUG同名。

相關問題