2010-10-18 122 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同名。

相关问题