星形作为Doxygen类图中可见性说明符的含义

时间:2017-06-08 13:02:15

标签: doxygen

Doxygen从C ++代码生成的一些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,撰写时的当前版本]

1 个答案:

答案 0 :(得分:0)

TLDR :它是成员分组机制的工件,并不会传达任何语言信息,即它不是UML的扩展。< / p>

详细信息:特别是&#39; *&#39;是从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);
  }
}

member groups行为的Doxygen手册说明同时指出了///@{和{{1}内的自动分组(&#34;在类型和保护级别上将事物分组在一起&#34;)分组注释。简短的实验表明,通过///@}分组注释或明确命名自动组会导致成员被添加为一个组,因此双重列出&#39; *&#39;能见度。例如,此类生成后续图表:

///@name

Generated class diagram for 'base'

它是一个令人尊敬的特征(从2004年开始),看似无条件(至少对代码进行简要检查并没有表明任何控制机制超出了#34; UML_LOOK = NO&#34; ,并且可以安全地忽略。