IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[doxygen] Spécialisations templates & liens


Sujet :

C++

  1. #1
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 765
    Points
    765
    Par défaut [doxygen] Spécialisations templates & liens
    Bonjour,

    Avec la version actuelle de doxygen (1.8.6), j'ai quelques soucis avec les spécialisations de classes templates. En particulier, j'ai une classe template qui a cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Déclaration de base
    template<typename T>
    class signal;
     
    // La "vraie" classe est une spécialisation
     
    /// Un peu de documentation ici
    template<typename ... Args>
    class signal<void(Args...)> {
        /// Un peu là aussi
        void foo();
    };
    Sur cet exemple, doxygen génère deux classes :
    • signal
    • signal<void(Args...)>


    En revanche, quand j'ai une variable membre de type signal<void(int)> par exemple, doxygen génère un lien vers signal (qui ne contient aucune information utile, vu que la classe générique est vide) au lieu de signal<void(Args...)>.

    Savez-vous s'il existe un moyen de changer ça?
    Sinon, savez-vous comment rediriger les liens de signal vers signal<void(Args...)>, tout en supprimant signal de la liste des classes?

    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 630
    Points : 30 699
    Points
    30 699
    Par défaut
    Salut,

    Dans le pire des cas, tu peux t'en sortir en utilisant la balise sa (facultative) sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /** The forward declaration for the signal class
      *
      * This is the forward declaration for any signal used by the program
      * @sa template<typename ... Args> signal<void(Args...)>
      *
      */
    template<typename T>
    class signal;
    /** the real signal definition
      *
      */
    template<typename ... Args>
    class signal<void(Args...)> {
        /// Un peu là aussi
        void foo();
    };
    La balise @sa permet d'avoir un titre du genre de "see also" et le lien sera effectué sur signal<void(Args...)>.

    Le tout ressemblera à quelque chose comme (ne pas cliquer sur le lien, c'est un lien bidon )
    template<typename T>
    class signal< T >

    The forward declaration for the signal class

    This is the forward declaration for any signal used by the program

    See Also

    template<typename ... Args> signal<void(Args...)>

  3. #3
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 765
    Points
    765
    Par défaut
    Merci Koala, je ne connaissais pas la balise @sa !
    Par contre doxygen n'arrive pas à faire le lien avec signal<void(Args...)> chez moi, ça fonctionne de ton côté?

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 630
    Points : 30 699
    Points
    30 699
    Par défaut
    Citation Envoyé par Kalith Voir le message
    Merci Koala, je ne connaissais pas la balise @sa !
    Par contre doxygen n'arrive pas à faire le lien avec signal<void(Args...)> chez moi, ça fonctionne de ton côté?
    Oui, tout à fait...

    Mais je suis sous linux avec la version 1.8.4. Cela peut donc avoir changé, bien que ce serait alors une régression (à moins qu'ils n'aient prévu une autre manière de le faire :-S )

  5. #5
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Il y a aussi la balise @copydoc qui peut t’intéresser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /**
     * @copydoc signal<void>(Args...)
     */
    Cela dit, à ma connaissance, doxygen ne permet pas de documenter les spécialisations de template. Du coup, je mettrai la doc dans la déclaration du template.

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 765
    Points
    765
    Par défaut
    @koala: Si je lance doxygen 1.8.6 sous linux avec la configuration par défaut (doxygen -g) sur le code que tu as écrit, il ne génère aucune doc pour la classe générique signal<T> car c'est juste une déclaration anticipée. Si je rajoute un corps vide, alors la doc apparaît. Mais, second problème, dans le "See Also", il m'écrit effectivement un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    See Also
        template<typename ... Args> signal<void(Args...)>
                                    ^~~~~^ (lien)
    ... mais le lien pointe vers la page de signal<T>, pas de signal<void(Args...)>

    white_tentacle: Si, si, il supporte bien la documentation des spécialisations templates. C'est juste que je n'arrive pas à lui faire faire les liens correctement. Par contre je connaissais déjà @copydoc, je m'en sers ailleurs, mais ici elle ne m'aide pas beaucoup.

Discussions similaires

  1. problème de spécialisation template
    Par CedricMocquillon dans le forum Langage
    Réponses: 10
    Dernier message: 18/03/2011, 11h59
  2. Spécialisation template qui n'est jamais appelée
    Par coyotte507 dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2008, 13h39
  3. Héritage et Spécialisation Template
    Par loman02 dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2008, 18h35
  4. Spécialisation template et définition multiple
    Par loman02 dans le forum Langage
    Réponses: 10
    Dernier message: 23/04/2008, 14h48
  5. probleme spécialisation template
    Par babar63 dans le forum Langage
    Réponses: 23
    Dernier message: 30/10/2007, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo