2017-08-25 11 views
8

W ramach dokumentowania mojej bazy kodu C++ staram się uzyskać pełny zasięg Doxygen - to znaczy, że chcę, aby wszystkie moje (setki) plików nagłówkowych miały dobrze sformułowane komentarze Doxygen dla wszystkich ich publicznych API, tak, że mogę uruchomić Doxygen na bazie kodu i nie widzę żadnych ostrzeżeń "ostrzeżenie: bla nie jest udokumentowane".Czy jest jakaś sztuczka, aby zredukować ilość zbędnych komentarzy wymaganych do pełnego pokrycia Doxygen?

Ogólnie rzecz biorąc jest to tylko kwestia przechodzenia i dokumentowania rzeczy, ale zauważyłem, że wciąż powtarzam ten sam tekst dla każdej klasy. Na przykład, mam wiele wystąpień w zasadzie tak:

/** The Foo class represents blah blah blah */ 
class Foo 
{ 
public: 
    /** Default constructor */ 
    Foo(); 

    /** Copy constructor 
     * @param rhs the object to make this object a copy of. 
     */ 
    Foo(const Foo & rhs); 

    /** Destructor */ 
    ~Foo(); 

    /** Equality operator. 
     * @param rhs the object to compare against. 
     * @returns true iff this object and (rhs) are equal. 
     */ 
    bool operator == (const Foo & rhs) const; 

    /** Inequality operator. 
     * @param rhs the object to compare against. 
     * @returns true iff this object and (rhs) are not equal. 
     */ 
    bool operator != (const Foo & rhs) const; 

    /** Assignment operator 
     * @param rhs the object we should copy our state from 
     * @returns a reference to *this 
     */ 
    Foo & operator = (const Foo & rhs); 

[...] 
} 

Te komentarze są (zazwyczaj) bardziej lub mniej dokładnie takie same dla każdej klasy, ponieważ te funkcje/operatorzy niemal zawsze działają dokładnie w ten sam sposób dla każdego klasa. Rzeczywiście, posiadanie operatorów lub konstruktorów kopiujących, którzy zachowywaliby się w jakiś inny sposób, byłoby wątpliwym wzorcem projektowym, ponieważ programiści C++ zasadniczo oczekują, że operatorzy pracują w ten sam sposób dla każdej klasy.

Moje pytanie brzmi, czy jest jakaś sztuczka, dzięki której mogę powiedzieć Doxygenowi, aby automatycznie generował rozsądną dokumentację dla tych rzeczy (np. Za pośrednictwem jakiegoś szablonu lub makra) bez konieczności ręcznego wprowadzania tego tekstu w kółko? Znacznie ograniczyłoby to ilość tekstu, który muszę wprowadzić i utrzymać, a także usunąłoby bałagan z moich plików nagłówkowych, pozwalając mi na usunięcie komentarzy odmiany "no duh", aby czytelnik mógł łatwiej znaleźć komentarze które oferują prawdziwy wgląd.

+0

Jestem w trakcie pisania dość dużej biblioteki klasowej. Zacząłem pisać krótki scenariusz, który wypluwa robo-generowany kod szkieletu ze wspólnym wzorcem projektowym dla większości moich zajęć. W tym komentarze Doxygen z kilkoma słowami kluczowymi, które ręcznie naprawiam za pomocą wyszukiwania/zamiany. Nie mogłem znaleźć lepszego podejścia. –

+0

@JeremyFriesner: "* ostrzeżenie: bla nie jest udokumentowane *" Czy rozważałeś wyłączenie ostrzeżenia? Zwłaszcza wokół parametrów i typów zwrotu; nie ma powodu, aby je dokumentować. –

+0

@NicolBolas dla innych (bardziej interesujących) funkcji i metod często istnieje powód do ich dokumentowania. Gdybym mógł wyłączyć ostrzeżenia tylko dla niektórych typów członków klasy, byłoby to przydatne, ale nie sądzę, żebym miał taki poziom kontroli. –

Odpowiedz

1

Istnieje kilka komend dla dokumentacji Kopiowanie:

\copydoc \copybrief \copydetails

Doxygen pomoc sugeruje następującą składnię:

/*! @copydoc MyClass::myfunction() 
* More documentation. 
*/ 

To pozwala kopiować dokumentację z jednej klasy do drugiej . Czasami tworzę tylko dokumentację klasy, która nie jest skompilowana jako standardowe miejsce do rysowania dokumentacji od reszty projektu.

+0

Interesujące - czy dodasz pojedynczą linię @copydoc powyżej deklaracji każdego operatora przypisania/porównania, konstruktora kopiowania, domyślnego konstruktora itp.? –

+0

Tak, jest to część mojego szablonu zajęć. –

Powiązane problemy