2016-12-31 5 views
1

は、私が文書化されていない基底クラスで、いくつかの外部ライブラリを持っていると言う:私のライブラリで派生クラス内の仮想メンバをオーバーライドせずにドキュメント化できますか?

class Base { 
public: 
    virtual void func() { /* something */ } 
} 

、私はこのクラスから派生したい、とすべてのメンバーを文書化:

class Derived : public Base { 
    /*! 
     @brief do a thing 
    */ 
    void other_func(); 

    /*! 
     @brief do the base thing and another thing 
    */ 
    void func(int arg); 

    /*! 
     @brief do the baseclass thing 

     Also, guarantee some extra invariants XYZ that the baseclass 
     does, but does not require subclassers to do. 
    */ 
    using Base::func; 
    // virtual void func() override; 
    // don't want to declare a new implementation of func() here 
    // so how can I attach a docstring to func() such that doxygen picks up on it? 
} 

私は文書化するにはどうすればよいです継承されたBase::funcDerived.hにありますか?

+2

もちろん、コメントを追加することはできますが、仮想メンバー関数の考え方全体では、オーバーライドしないと宣言する必要はありません。あなたの新しいクラスがそれをオーバーライドしないなら、なぜそこにドキュメントストリングが必要ですか?基本クラスと同じことを行います。うまくいけば文書化されていますか?そうでない場合は、ドキュメントを追加して、元のベンダー/著者にフィードバックとしてパッチを投稿してください! –

+3

@MatsPetersson:外部ベースクラスで文書化されていないという問題があります。そのため、ライブラリの中にドキュメントを追加して明快にするために、doxygenが選択します。また、Derived :: funcが満たすと予想されるいくつかの余分な不変条件があります。文書化したいのですが、 'Base :: func'はすでに偶然によってこれらを満たしているので、再実装は必要ありません – Eric

答えて

3

@fnタグを使用します。そのタグを使用して関数のシグネチャを指定すると、そのブロックの残りの部分がその関数に割り当てられます。

申し訳ありませんが、電話で例を挙げます。

私は公式のドキュメントにリンクしたいと思いますが、イライラして、やや皮肉なことに、doxygenのリファレンスWebサイトはモバイルでは動作しません。だからGoogleのためだけに。

+0

残念ながら、私実際のケースはこれでは動作しません - 継承された名前のオーバーロードがあり、 '\ fn func()'を使用しようとする試みはすべてドキュメントを 'func(int)'に追加するだけです。私はこれを反映するために私の質問を更新しました – Eric

関連する問題