C++ 我需要在派生类上指定属性吗?
我有这个接口。如果我派生,是否需要再次指定C++ 我需要在派生类上指定属性吗?,c++,C++,我有这个接口。如果我派生,是否需要再次指定格式属性?而且,如果一个类Deriv实现了这个接口,我可以使用Deriv::LT_DEBUG class Logger { public: enum LogType { LT_DEBUG = 0, LT_WARNING, LT_ERROR, LT_STAT, LT_TEXT
格式属性
?而且,如果一个类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(){}
};
我找不到关于它的任何文档,但我猜
\uuuuu属性\uuuuu
注释不是由派生类隐式继承的。这意味着,如果您通过
Deriv
实例、引用或指针调用EHLog
,则仅当Deriv::EHLog
还指定了\uuu属性((格式))
注释时,才会执行格式检查
我猜测的原因是,通过这种方式,编译器不必更改其名称查找机制,以应对被重写的基类函数上的\uuuu属性\uuu
注释的可能性
至于第二个问题:是的,您可以使用派生类限定从基类访问名称
Deriv::LT_DEBUG
应该可以工作并解析为与Logger::LT_DEBUG
相同的名称。我从未见过这样的事情,它用于验证函数的参数是否正确。如果你使用可变参数列表。:@ereOn@Kiril-Kirov:谢谢你的链接。真的很有趣。一个测试表明,如果您在没有属性的情况下专门调用派生类的方法,则不会检查格式。