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

Langage C++ Discussion :

chargement dynamique de namespace


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut chargement dynamique de namespace
    Bonjour à toutes et à tous,

    je fais depuis ce matin quelques recherches et tests avec les namespaces C++ auquels je n'avais jamais touché jusqu'à maintenant.
    Ma problématique est simple, j'aurai à terme des class du même nom d'où l'utilisation de namespace.
    Chacun de ces namespaces sera appelé sans intéraction avec les autres, un peu comme deux applications totalement différentes mais compilées en une.

    J'ai donc fait quelques tests pour un point d'entrée conditionnel.
    Voici ce qu'il est possible de faire dans un premier temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void exec(string name){
      if( name == "foo" ){
        using namespace foo;
        someClass::exec();
      }else{
        using namespace bar;
        someClass::exec();
      }
    }
    Le code étant simplifié pour l'exemple, mais j'aurai à terme des milliers de lignes à la place de l'appel à someClass::exec(). Or à cause de cette déclaration de namespace il va me falloir dupliquer le même code !
    Je précise que je ne veux pas préfixer mes appels par le namespace, c'est pas le but de tout réécrire justement.

    J'ai réfléchi à tout ce qui me passait par la tête, constante (mais évalué à la compilation donc pas bon), variable (passe pas dans un using namespace), sans trouver mieux que ce que j'ai posté.

    Auriez-vous une méthode autre que celle là qui pourrait me statisfaire ? Ou une autre façon de traiter ce problème ?

    Cordialement,
    xTG.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu peux rendre ta fonction template, en prenant en parametre soit foo::someClass, soit bar::someClass
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    namespace{
    template <class someClass>
    void exec_inner(string name){
        someClass::exec();
    }
    };
     
    void exec(string name){
      if( name == "foo" ){
        exec_inner<foo::someClass>(name);
      }else{
        exec_inner<bar::someClass>(name);
      }
    }
    Sinon, tu peux te tourner du coter des librairies dynamiques

  3. #3
    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
    Par défaut
    Salut,
    Citation Envoyé par transgohan Voir le message
    Auriez-vous une méthode autre que celle là qui pourrait me statisfaire ? Ou une autre façon de traiter ce problème ?
    2 dlls (ou l'équivalent selon ton OS).

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Merci pour vos réponses.
    Finalement cette partie de mes réflexions a été jeté.
    Mon chef préfère des fichiers à rallonge à coup de if que des codes qui pourraient ne pas être compris par des futurs stagiaires...
    Je m'intérroge tout de même, ce serait quoi pour un stagiaire le plus difficile à comprendre ? Un appel de code asm ou bien l'utilisation d'un namespace ?

    Concernant les librairies dynamiques je me suis renseigné, on ajoute tout de même beaucoup de complexité pour pas grand chose. En plus j'ai cru lire dans le lot de documents que j'ai parcouru ce matin que cela apportait aussi un temps de chargement non négligeable à l'application, chose qui ne m'avantage guère étant sur un système temps réel.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Et oui, c'est l'avantage d'un patron, préférer la prise en main par le futur stagiaire, mais exiger les performances...

    Un gros if(soft==soft1) loadLibrary("dll1"); else loadLibrary("dll2");, ca ne suffit pas?

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Citation Envoyé par leternel Voir le message
    Un gros if(soft==soft1) loadLibrary("dll1"); else loadLibrary("dll2");, ca ne suffit pas?
    Et dans le cas où les deux peuvent avoir à être chargées ?
    Mon problème n'est pas un chargement exclusif justement, j'ai simplifié à l'extrème le problème présenté. Mais pource que j'en comprends c'est pas les librairies dynamiques qui vont remplacer les namespaces.
    Mais bon, l'argument ressorti était aussi qu'il veut pas de fichiers qui se baladent à côté du binaire donc la question est close.

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Dans ce cas, have fun et bon courage!

Discussions similaires

  1. [jar]chargement dynamique.
    Par Teddy-htk dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 27/04/2006, 15h19
  2. [tomcat]chargement dynamique de classes depuis une webapp
    Par alphamax dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/03/2004, 09h59
  3. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  4. Dll a chargement dynamique
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/06/2003, 22h47
  5. Chargement dynamique de DLL sous Unix
    Par Willou dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/12/2002, 18h25

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