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 :

namespace VS methodes statiques


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut namespace VS methodes statiques
    Bonjour,
    j'aimerais avoir un conseil.
    Voilà, j'ai 2 classes CCall et CLine avec leurs attributs et méthodes. J'ai rajouté des fonctions "statiques" à ces classes car ce sont des fonctions qui ne s'appliquent pas sur des objets de la classe, mais qui ont une certaine relation avec la classe. Disons que sans ces classes, ces fonctions n'auraient aucun interêt, et ne pourraient être utilisés.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class CCall
    {
     DWORD m_dwState;
    ...
    };
     
    class CLine
    {
     std::string m_name; //"IPPhone: 213
     
    public:
    std::string GetName();
    };
    Et j'aimerais "caser en quelque part" la fonction utilitaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string GetNumberByName(const std::string& name)
    qui retournerait "213" pour mon exemple.


    Et j'aimerais aussi caser une fonction utilitaire qui me renverrait une chaine en fonction d'un nombre passé en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    std::string GetCallStateString(DWORD dwState)
    {
    std::string strState = "";
     
    switch (dwState)
    {
    case LINECALLSTATE_IDLE	: strState = "Idle";	break;
    case LINECALLSTATE_OFFERING : strState = "Offering";	break;
     ...
    }
    return strState;
    }
    Mais je ne peux pas l'appeler directement sur un objet CCall car le dwState passé peut être obtenu de par ailleurs.


    Donc voilà, vaut-il mieux mettre ces fonctions en statiques dans mes classes, ou leur créer un namespace ?

    Merci par avance,
    @+

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Je ne comprends pas pourquoi tu voudrais créer un namespace pour les fonctions de ta classe. Je n'ai d'ailleurs jamais essayé de créer un namespace à l'intérieur d'une classe, je ne crois pas que ça soit possible.
    La question à se poser pour ta méthode statique GetCallStateString n'est-il pas plutôt de savoir si elle est publique ou privée, à savoir si l'utilisateur de ta classe est-il en mesure de connaître le dwState ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Après avoir fait un test, il est donc bien impossible de spécifier un namespace à l'intérieur d'une classe. Cela court-circuiterait le polymorphisme en permettant d'avoir des méthodes identiques (même nom, même paramètre) sous des namespace différents à l'intérieur d'une même classe.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Salut,
    je me suis alors mal expliqué.
    Je ne veux pas le mettre à l'intérieur de la classe (ça ne m'était même pas venu à l'idée ...).
    Soit mes fonctions sont des fonctions statiques de la classe, soit elles sont regroupées dans un namespace (à l'extérieur de la classe). Là est la question ?
    Pour l'instant elles sont statiques dans la classe ...

    La fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string GetCallStateString(DWORD dwState)
    pourrait par exemple être appelée en cas de débug par qqun qui voudrait visualiser + précisément la description d'un état, sans pour autant travailler sur un objet de la classe.

    Disons que c'est plus des fonctions utilitaires, mais qui se rapprochent de ma classe, car sans la classe elles n'ont aucune raison d'être appelée ...

    @+

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si ce sont des fonctions utilitaires pour une classe précise, il semble logique de les placer dans la portée de cette classe. Enfin moi je ne me poserais même pas la question.

    Le namespace ce serait surtout utile pour quelqu'un qui voudrait ajouter des fonctionnalités à une classe qu'il ne peut pas modifier.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    OK, bien reçu.
    Donc je garde ma première intention.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/10/2007, 00h26
  2. probleme accès methode statique
    Par jpsegret dans le forum Langage
    Réponses: 5
    Dernier message: 02/04/2007, 15h40
  3. Réponses: 2
    Dernier message: 02/05/2006, 14h34
  4. Methodes statiques
    Par romeo9423 dans le forum C++
    Réponses: 3
    Dernier message: 01/02/2006, 11h30
  5. [Singleton] difference singleton classe avec methodes statiques
    Par matN59 dans le forum Design Patterns
    Réponses: 6
    Dernier message: 15/01/2006, 11h04

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