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 :

Templates et temps de compilation


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Templates et temps de compilation
    Bonjour,


    J'ai créé une librairie de gestion de données basée sur des templates.
    Voici mon organisation :

    libUtils (utilitaires)
    libGesDatas (gestion de donnée, templates de partout)
    libBusiness (données métier, utilisant la lib précédente)
    Projet1 (projet utilisant les données métier pour répondre aux besoins)

    Le problème c'est que tout est lié statiquement, et en travaillant sur Projet1 juste en utilisant les données de libBusiness (donc les templates sont déjà implémentés avec chaque donnée métier), la compilation est assez longue rendant le développeur peu productif.

    Donc je me demandais si je pouvais faire de libBusiness une DLL, si ça vallait le coup ?

    Merci,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je ne suis pas sur que cela change quelque chose. Pour améliorer le temps de compil passe plutôt par des pré-compiled header.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Ok merci, je vais regarder ce que sont les pré-compiled header (en détail) pour savoir où et comment les utiliser.

    Merci
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    extern template est probablement la solution que tu cherches pour n'instancier des templates qu'une seule fois.
    Boost ftw

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Concernant les entêtes précompilées, dans ma libBusiness j'ai que ce genre de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class CClient : public CData<CClient>
    {
     
    };
    J'ai un include qui inclue toutes mes données métiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include "CClient.h"
    #include "CVehicle.h"
    //etc...
    Le but de cet include est qu'il définie également une type list avec toutes les classes métiers, liste qui sera utilisée pour une hiérarchie éparpillée.

    Dans les propriétés du projet libBusiness, j'ai indiqué "Créer une entête pré-compilée" avec le fichier d'inclusion ci dessus.
    A la compilation, lorsqu'il crée la librairie, j'ai beaucoup de warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1>CClient.obj : warning LNK4006: ___@@_PchSym_@00@UmvdwveUtvhwzgzhUoryhUocdyfhrmvhhUwvyftUxzeoorhgOlyq@ déjà défini dans CVehicle.obj
    Et au link du projet utilisateur (Projet1) j'ai des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2>libBusinessd.lib(CClient.obj) : error LNK2005: ___@@_PchSym_@00@UmvdwveUtvhwzgzhUoryhUocdyfhrmvhhUwvyftUxzeoorhgOlyq@ déjà défini(e) dans libBusinessd.lib(CAvlList.obj)
    J'imagine que j'utilise mal ces entêtes pré compilées.


    C'est quoi "extern template" ? Ca va faire quoi ?

    Merci pour vos réponses,


    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  6. #6
    screetch
    Invité(e)
    Par défaut
    c'est un truc qui vient du futur. Loufoque vient de l'an 2020 pour nous expliquer ce que sera le C++ alors.

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    C'est un truc qui doit être implémenté dans GCC et MSVC depuis près de 10 ans.
    Ça permet de spécifier qu'une instantiation de template se trouve dans une autre unité de traduction, et que donc il ne faut pas l'instancier mais se référer à celle-ci.
    Boost ftw

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Merci loufoque,


    Mais je ne comprends pas où je peux mettre ce "extern". Car dans ma lib de gestion de données, j'ai mes templates. Dans ma lib métier, j'ai mes classes métier, et dans mon projet, j'ai l'utilisation de ces classes métier, qui sont sans templates à l'utilisation.

    Pour l'entête précompilée, mon projet étant fait à base de MFC (oui berk, domage mais j'ai pas le choix), il possède une entête stdafx.h. Dans ce fichier j'ai rajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <libBusiness/business.h>
    C'est le fichier qui inclut toutes les classes métiers dérivants des classes template. Est-ce que c'est correct ?


    Merci,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/04/2008, 18h47
  2. Temps de compilation
    Par casafa dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 10/03/2008, 01h05
  3. Calculer le temps de compilation
    Par Edisan dans le forum C
    Réponses: 7
    Dernier message: 16/12/2007, 18h45
  4. Réponses: 8
    Dernier message: 10/12/2007, 18h03
  5. [Compilateur]Temps de compilation et recompilation
    Par afrikha dans le forum Général Java
    Réponses: 12
    Dernier message: 18/11/2005, 08h03

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