由C ++代码中的Doxygen生成的一些UML样式类图对于可见性限定符具有'*',并且另外一些这样的成员是重复的,例如,在这个模拟的例子中使用foo()和fred():
public: virtual void foo() = 0;
protected: virtual void bar() = 0;
public: virtual void fred() = 0;
输出可能是:
+ foo()
# bar()
* foo()
* fred()
所以foo()显示为public和'*',fred()就像'*'一样。这似乎与其他语言功能无关,例如虚拟,纯粹,模板化派生或重载,或继承定义或返回类型。
“*”能见度表示什么?
[使用Doxygen版本1.8.13,撰写本文时的当前版本]
TLDR:它是成员分组机制的工件,似乎不传达任何语言信息,即它不是UML的扩展。
详细信息:特别是'*'是从DotNode::writeBox()
枚举成员组生成的,excerpted from here:
MemberGroupSDict::Iterator mgdi(*m_classDef->memberGroupSDict);
MemberGroup *mg;
for (mgdi.toFirst();(mg=mgdi.current());++mgdi)
{
if (mg->members())
{
writeBoxMemberList(t,'*',*mg->members(),m_classDef);
}
}
Qazxswpoi行为的Doxygen手册描述了自动分组(“在类型和保护级别上将事物组合在一起”)并明确地通过member groups和///@{
分组注释中的封闭。简短的实验表明,分组注释或通过///@}
明确命名自动组会导致成员被添加为一个组,因此双重列出了'*'可见性。例如,此类生成后续图表:
///@name
class base {
public:
///@{
void pubfoo();
void pubbar();
///@}
void pubfoo(char); // no '*' visibility
protected:
///@name Group2
void protfoo(); ///< Foolishly
void protbar(); ///< Barely
};
这是一个令人尊敬的特征(从2004年开始),看似无条件(至少对代码的简要检查没有显示任何超出“UML_LOOK = NO”的大锤子的控制机制),并且可以安全地忽略。