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

问题描述 投票:2回答:1

由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,撰写本文时的当前版本]

doxygen
1个回答
0
投票

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”的大锤子的控制机制),并且可以安全地忽略。

© www.soinside.com 2019 - 2024. All rights reserved.