我是否需要在派生类上指定属性?

时间:2010-10-18 08:57:16

标签: c++

我有这个界面。如果我派生,我是否需要再次指定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(){}
};

1 个答案:

答案 0 :(得分:0)

我找不到任何关于它的文档,但我想__attribute__注释不是由派生类隐式继承的。
这意味着,如果您通过EHLog实例,引用或指针调用Deriv,则仅在Deriv::EHLog还指定__attribute__((format))注释时才进行格式检查。

我猜测的原因是这样编译器不必更改其名称查找机制来处理被覆盖的基类函数上__attribute__注释的可能性。


关于第二个问题:是的,您可以使用派生类限定从基类访问名称。 Deriv::LT_DEBUG应该工作并解析为与Logger::LT_DEBUG相同的名称。