OVH Cloud OVH Cloud

static prive Vs namespace prive

6 réponses
Avatar
Aurélien REGAT-BARREL
Bonjour à tous,
l'énorme succès de ma question précédente m'amène à poser une question plus
coute :
que pensez-vous de l'utilisation d'un namespace privé dans le .cpp à la
place d'un membre statique privé dans le .h + .cpp.
Exemple simple : on veut compter le nombre de classes créées :

// --------- static privé ---------
// .h
class Compte
{
public:
Compte();
static int NombreDeClasses();

private:
static int s_NbClasses;
};

//.cpp
int Compte::s_NbClasses = 0;

int Compte::NombreDeClasses() { return s_NbClasses; }
Compte::Compte() { ++s_NbClasses; };

// --------- namespace privé ---------
// .h
class Compte
{
public:
Compte();
static int NombreDeClasses();
};

//.cpp
namespace
{
int NbClasses = 0;
}

int Compte::NombreDeClasses() { return ::NbClasses; }
Compte::Compte() { ++::NbClasses; };


Que préférez-vous ?

--
Aurélien REGAT-BARREL

6 réponses

Avatar
Jean-Marc Bourguet
"Aurélien REGAT-BARREL" writes:

Que préférez-vous ?


Ne pas mettre dans un .h des choses qui peuvent ne pas y etre.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Aurélien REGAT-BARREL
Ne pas mettre dans un .h des choses qui peuvent ne pas y etre.


C'est aussi mon avis.
Cela me pousse à cette question provocatrice : quelle est l'utilité d'une
variable membre static ?

--
Aurélien REGAT-BARREL

Avatar
Jean-Marc Bourguet
"Aurélien REGAT-BARREL" writes:

Ne pas mettre dans un .h des choses qui peuvent ne pas y etre.


C'est aussi mon avis.
Cela me pousse à cette question provocatrice : quelle est l'utilité d'une
variable membre static ?


Une classe en C++ a plusieurs fonctionnalites:
- type
- espace de nommage
- protection d'acces

Les membres statiques permettent de profiter des deux derniers sans
prendre en compte le premier.

Comme le seul autre moyen d'avoir une certaine protection d'acces sont
les namespaces anonymes et declarations statiques de fichiers qui sont
limites a un fichier, si on veut de la protection d'acces le choix est
restreint.

Pour les membres statiques publics, le choix est simplement celui du
meilleur espace de nommage.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Aurélien REGAT-BARREL
Est-ce que déclarer une classe dans un namespace privé te choque ou pas ?

// Data.h : interface d'accès aux données (lecture seule)
class Data
{
public:
int GetValue( int Index ) const;
protected:
std::vector<int> Values;
};


// PredefinedData.h : accès à des Data prédéfinies
namespace PredefinedData
{
Data GetPredefinedData( std::string DataName );
}

// PredefinedData.cpp
namespace // namespace privé
{
class DataFiller : public Data
{
public:
void AddValue( int V ) { this->Values.push_back( V ); }
};
}

namespace PredefinedData
{
Data GetPredefinedData( std::string DataName )
{
DataFiller data;
data.AddValue( 10 );
return data;
}
}

C'est ce que j'ai fait et je ne sais pas trop si c'est bien ou s'il y a
mieux.
Faudrait-il plutot créer la classe DataFiller dans ses propres fichiers (.h,
.cpp) et les mettres dans un répertoire private par exemple ?
Déclarer une classe dans un cpp me gêne un peu.
A+

--
Aurélien REGAT-BARREL
Avatar
Jean-Marc Bourguet
"Aurélien REGAT-BARREL" writes:

Est-ce que déclarer une classe dans un namespace privé te choque ou pas ?

C'est ce que j'ai fait et je ne sais pas trop si c'est bien ou s'il y a
mieux.


Ca ne me gene absolument pas.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Aurélien REGAT-BARREL
"Jean-Marc Bourguet" a écrit dans le message de
news:

Ca ne me gene absolument pas.


Ok merci.
Je trouve ce procédé meilleur que de passer par friend.
A+

--
Aurélien REGAT-BARREL