• [^] # Re: Expressivité

    Posté par (Mastodon) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 5.

    Typiquement, la STL regorge de définitions de templates qu'on peut utiliser en les instanciant dans son propre code. Du coup, je veux bien un petit exemple :)

    La STL est presque complètement définie dans des .h, pas dans la bibliothèque, justement à cause des templates.

    Petit exemple, imaginons que j'ai une classe template dans un .h

    template<typename T>
    class Foo {
    public:
     void doThis();
     void doThat();
    private:
     T m_data;
    };

    Après avoir écrit ça, j'ai alors deux choix pour implémenter les deux méthodes : soit les mettre dans le .h, soit les mettre dans le .cc (ou .cpp suivant les crémeries). Si tu les mets dans le .h, tu pourras instancier Foo avec n'importe quel type puisque tu auras accès aux définitions des méthodes (pas juste leur déclaration). Si tu les mets dans le .cc, tu ne pourras instancier que ce que le concepteur de la lib aura lui même instancié explicitement parce que tu n'auras pas accès aux définitions.

    Après, si tu mets les définitions dans le .h, tu peux soit les mettre directement dans la classe, soit séparément après la déclaration de la classe et même parfois dans un fichier à part (parfois suffixé .inl) que tu inclueras dans ton .h.