2017-06-08 4 views
2

C++コードからDoxygenによって生成されたUMLスタイルのクラス図には、可視性修飾子に '*'が付いています。 (fooで)とフレッド()この嘲笑アップの例では:Doxygenクラス図の可視性指定子としての星の意味

public: virtual void foo() = 0; 
protected: virtual void bar() = 0; 
public: virtual void fred() = 0; 

出力は次のようになります。

+ foo() 
# bar() 
* foo() 
* fred() 

そうFOO()、公共および '*' の両方として表示されますフレッド()同じように '*'。これは、仮想、純粋、テンプレートの派生やオーバーロード、継承された定義、戻り型などの他の言語機能とは相関していないようです。

「*」可視性は何を表していますか? [、執筆時点で現在のリリースをDoxygenのバージョン1.8.13を使用して]

+0

"純粋仮想パブリック関数"または単に "仮想パブリック関数"を意味する可能性があります。 –

+0

明らかにそうではありません - このモックアップの背後にある実際のケースでは、 –

答えて

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); 
    } 
} 

member groups行動のDoxygenのマニュアルの記述が両方一緒タイプと保護に自動グループ化(「グループ物事ノート「レベル」)、囲みによって、///@{および///@}のグループ化注釈内に明示的に表示されます。簡単な実験では、グループ化注釈または///@nameによる自動グループの明示的な名前付けによって、メンバーがグループとして追加され、 '*'可視性が二重にリストされることが示されています。大きなを越えた制御機構を示さなかった

class base { 
public: 
    ///@{ 
    void pubfoo(); 
    void pubbar(); 
    ///@} 
    void pubfoo(char); // no '*' visibility 
protected: 
    ///@name Group2 
    void protfoo(); ///< Foolishly 
    void protbar(); ///< Barely 
}; 

Generated class diagram for 'base'

それは(2004年から)由緒ある機能ですが、コードの一見無条件(少なくとも簡単な検査:たとえば、このクラスは、後続の図を生成し、 「UML_LOOK = NO」のハンマー)、無視しても安全です。

関連する問題