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 :

execution de code hors creation d'objets


Sujet :

C++

  1. #1
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Par d�faut execution de code hors creation d'objets
    Bonjour,

    Il me semble qu'il est possible en C++ de declarer du code qui doit etre execute au demarage d'une application sans etre appel� par une fonction.

    Si c'est possible pouvez vous me dire comment. Car j'ai une classe qui a des methodes statiques qui ont besoin de l'exectution d'une initialisation (creation de semaphores ....)

    Et comme je souhaite eviter quelque chose du type:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    maclasse::methode1()
    {
    if(!initialised)
    init();
    ....
    }
     
     
    maclasse::methode2()
    {
    if(!initialised)
    init();
    ....
    }
     
    ....
    ....
    ....
    ....
     
    maclasse::init()
    {
    creation de semaphore
    ....
    }
    Je ne sais pas si c'est tres clair et si c'est possible. Il me semble qu'un ancien copain avait reussi a faire ca avec visual studio.
    Merci pour votre aide,

    Franck

    balises [code] rajout�es par r0d.

  2. #2
    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
    Par d�faut
    Utilise un constructeur et pas une fonction membre init().
    Tu peux executer du code au d�but du programme avec des objets d�clar�s en static.

  3. #3
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Par d�faut
    Citation Envoy� par loufoque
    Utilise un constructeur et pas une fonction membre init().
    Tu peux executer du code au d�but du programme avec des objets d�clar�s en static.
    Merci pour ta reponse mais dans mon cas il n'y a pas d'objet cr�e avant l'appel des methodes statiques.
    Les methodes statiques que j'utilise sont des sortes "factory" d'objets maclasse et manipulent des listes d'objet maclasse. Et je souhaite proteger les appels (les methode1 et 2 peuvent etre appel� parrallellement) en utisant une semaphore qui doivent etre cr�e prealablement.

    Pour info le header est du type:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    maclasse {
      public:
      static methode1();
      static methode2();
      static init(); 
      methodedinstance1();
      methodedinstance2();
      methodedinstance3();
      .....
    }
    Je souhaite supprimer la fonction init sans creer pour cela d'objet ma classe a l'initialisation. Est-ce possible ??

    Merci

    balises [code] rajout�es par r0d. Merci d'y penser la prochaine fois.

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    130
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 130
    Par d�faut
    De toutes fa�ons, si tu n'as pas d'instance de ta classe MaClasse, il me semble que tu ne pourras pas utiliser tes m�thodes non statiques (methodeinstance1 ,2 et 3).
    Est-ce r�ellement g�nant pour toi de cr�er une instance de MaClasse � l'initialisation de ton appli ?

  5. #5
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Tu peux faire un objet initialiseur :

    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
    17
    struct maclasse_initializer
    {
        maclasse_initializer()
        {
            maclasse::methode1();
            maclasse::methode2();
        }
    };
     
    static maclasse_initializer gInitializer;
     
    int main ()
    {
        // arrivé ici, maclasse::methode1() et
        // maclasse::methode2() ont déjà été appelées
        ...
    }

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    D�tails du profil
    Informations personnelles :
    �ge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par d�faut
    Une autre solution, c'est d'avoir un membre statique qui te permet de savoir si la classe a �t� initialis�e, et de tester cette condition dans le constructeur.

    Si ce n'est pas fait, tu initialises ta classe.

    De cette fa�on, ta classe n'est pas initialis�e au d�but de l'application, mais uniquement au moment o� tu en as besoin.

  7. #7
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Par d�faut
    Citation Envoy� par loufoque
    Utilise un constructeur et pas une fonction membre init().
    Tu peux executer du code au d�but du programme avec des objets d�clar�s en static.
    En fait "static methode1()" cr�e des objets maclasse et les range dans une liste et "static methode2()" retourne le nombres d'objets maclasse. Ce sont ces fonctions qui ne doivent pas etre appelers en meme temps.

    Il n'y a pas de sens a creer une instance statique car l'objet ne sera utilis� par personne.
    Y-at-il une autre methode ??

  8. #8
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Citation Envoy� par gfranck
    Il n'y a pas de sens a creer une instance statique car l'objet ne sera utilis� par personne.
    si un objet est cr�� � des fins d'initialisation, il a quand m�me bien une utilit� !!

    Citation Envoy� par gfranck
    Y-at-il une autre methode ??
    Sans aucune construction d'objet statique, je ne crois pas...

  9. #9
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Utiliser un singleton ? Cela permet de forcer l'initialisation d'objets dans un certain ordre, lorsqu'on en a besoin.

Discussions similaires

  1. batch qui execute du code
    Par fbu78 dans le forum Access
    R�ponses: 2
    Dernier message: 21/09/2005, 22h31
  2. Executer du code binaire au sein d'un programme
    Par Hidekii dans le forum MFC
    R�ponses: 13
    Dernier message: 07/09/2005, 22h10
  3. [FLASH MX2004] Rien ne se passe qd j'execute mon code
    Par adilou1981 dans le forum Flash
    R�ponses: 2
    Dernier message: 27/07/2005, 23h31
  4. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 28/02/2005, 16h31
  5. Lancer des shell unix pour creation d'objet ORACLE
    Par sygale dans le forum Administration
    R�ponses: 6
    Dernier message: 27/10/2004, 18h03

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