2016-06-13 32 views
5

Ho un progetto scritto in C++ dove sto usando swig per generare anche alcuni wrapper C#. Il codice C++ utilizza i commenti in stile Doxygen per annotare le classi e le funzioni. È possibile convincere Swig a prendere quei commenti doxygen e produrre commenti doxygen per le classi e le funzioni del wrapper C#?Generazione di commenti doxygen per C# generato da swig che avvolge C++

+1

Esiste uno script doxy2swig.py, che genera un file che è possibile includere nel file dell'interfaccia .i. È abbastanza pulito –

+0

Ho problemi a trovare doxy2swig.py per lavorare con C#. Sembra che sia progettato per funzionare con Python e una ricerca di Google rapida non ha prodotto alcun risultato. Qualche idea? – Alex

+0

Dovrebbe funzionare bene. Genera un file 'DesiredName.i', che può essere incluso usando'% include "DesiredName.i" '. Hai un'uscita? –

risposta

4

Attualmente, SWIG non analizza i commenti del codice, inclusa la documentazione Doxygen.

C'è un ramo SWIG in sviluppo da un paio di anni per consentire a SWIG di gestire i commenti Doxygen, ma anche quello attualmente (AFAIK) li mappa solo in documentazione Java e Python.

Attualmente l'opzione migliore è estrarre la documentazione Doxygen dal codice sorgente C++ e inserirla nel wrapper generato da SWIG. Per capire come questo può essere fatto, ecco una breve spiegazione di ciò che doxy2swig.py fa (e questo è infatti pensato per docstring Python):

  1. Let Doxygen estrarre la documentazione in formato XML
  2. analizzare il codice XML, e riformattare in appropriate Python docstrings
  3. Scrivere %feature("docstring") Direttive SWIG per dire a SWIG di allegare le docstring alle classi e ai metodi avvolti.

Fondamentalmente, qualcosa di simile può essere fatto anche per C#. Non so come fare (2) per C#, cioè come tradurre l'output Doxygen XML in una documentazione C# adatta, questo potrebbe essere necessario implementare te stesso (magari modificando lo script doxy2swig.py).

Per (3) c'è un trucco ordinario che è un po 'documentato here, notando che lo stesso può essere fatto anche per C# usando %csclassmodifiers e %csmethodmodifiers. Queste direttive di funzionalità SWIG sono utilizzate da AFAIK per anteporre i metodi o le classi public o protected a C#. Ma possono essere dirottati per anteporre la documentazione estratta (+ la parola chiave public, per non dimenticare). Pertanto, consentono effettivamente la stessa funzionalità della direttiva %feature("docstring") per Python.

Infine, non conosco C#, ma che senso ha avere i commenti Doxygen inclusi nel wrapper C#? Se si desidera utilizzare Doxygen solo per generare documentazione, è possibile farlo direttamente dalle sorgenti C++, in modo da non ottenere nulla. In Python, le docstring possono essere visualizzate come aiuto in fase di esecuzione e vengono utilizzate da alcuni IDE. Anche C# ha questo?

+0

Questo è praticamente il percorso che ho seguito, quindi suppongo sia bello avere conferma dei miei sospetti. Per quanto riguarda la tua domanda: "Infine, non conosco C#, ma che senso ha avere i commenti Doxygen inclusi nel wrapper C#?" Credo che avrei dovuto essere più chiaro nella mia domanda. Non sono tanto interessato ai commenti per C# come nelle pagine della documentazione che sono state utilizzate per produrre.L'utilizzo diretto delle stringhe doc di C++ non funziona, perché molte volte i commenti si riferiscono ad altre funzioni, e tali riferimenti (e i collegamenti ipertestuali) devono puntare alle funzioni C# appropriate. – Alex