OVH Cloud OVH Cloud

Classes et use namespace

3 réponses
Avatar
JM
Voila mon problème.
J'ai créé une classe CGraph avec un certain nombres de fonctions
statiques que j'utilise un peu partout.
Mais au bout d'un moment, utiliser des CGraph::Fonction, cela s'avère
chiant et peu lisible.
Il n'y a pas moyen avec les namespace par exemple d'utiliser directement
Fonction?
J'ai pas réussi.

merci d'avance

3 réponses

Avatar
Christophe de VIENNE
JM wrote:
Voila mon problème.
J'ai créé une classe CGraph avec un certain nombres de fonctions
statiques que j'utilise un peu partout.
Mais au bout d'un moment, utiliser des CGraph::Fonction, cela s'avère
chiant et peu lisible.
Il n'y a pas moyen avec les namespace par exemple d'utiliser directement
Fonction?
J'ai pas réussi.


Si CGraph est un namespace et non une classe, tu peux écrire par exemple :

--- CGraph.h ---
namespace CGraph
{
void Fonction();
}


--- xxx.cc ---
using namespace CGraph;

int une_fonction()
{
Fonction();
}


A+

Christophe

--
Christophe de Vienne

Avatar
Arnaud Meurgues
JM wrote:
Voila mon problème.
J'ai créé une classe CGraph avec un certain nombres de fonctions
statiques que j'utilise un peu partout.
Mais au bout d'un moment, utiliser des CGraph::Fonction, cela s'avère
chiant et peu lisible.
Il n'y a pas moyen avec les namespace par exemple d'utiliser directement
Fonction?


Ben, si c'est pour utiliser directement Fonction, pourquoi avoir déclaré
ces fonctions dans une classes ?

Il pourrait être suffisant de les déclarer dans un namespace:

namespace Graph {
class CGraph { // la classe CGraph sans ses fonctions statiques
// ...
};
void Fonction(...);
}

Ensuite, il suffit de faire un
using Graph::Function;
pour pouvoir utiliser Graph::Function en l'appelant directement Function.

Autre solution s'il est obligatoire de déclarer ces fonctions comme des
fonctions statiques de CGraph : faire des wrappers dans un namespace. Ça
donnerait :

class CGraph {
void Function(...);
//...
};

namespace Graph {
inline void Function(...) { return CGraph::Function(...); }
}

Ensuite, on fait pareil qu'avec la solution précédente...

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
JM
Merci à vous deux.
Je vais essayer.


JM wrote:

Voila mon problème.
J'ai créé une classe CGraph avec un certain nombres de fonctions
statiques que j'utilise un peu partout.
Mais au bout d'un moment, utiliser des CGraph::Fonction, cela s'avère
chiant et peu lisible.
Il n'y a pas moyen avec les namespace par exemple d'utiliser
directement Fonction?



Ben, si c'est pour utiliser directement Fonction, pourquoi avoir déclaré
ces fonctions dans une classes ?

Il pourrait être suffisant de les déclarer dans un namespace:

namespace Graph {
class CGraph { // la classe CGraph sans ses fonctions statiques
// ...
};
void Fonction(...);
}

Ensuite, il suffit de faire un
using Graph::Function;
pour pouvoir utiliser Graph::Function en l'appelant directement Function.

Autre solution s'il est obligatoire de déclarer ces fonctions comme des
fonctions statiques de CGraph : faire des wrappers dans un namespace. Ça
donnerait :

class CGraph {
void Function(...);
//...
};

namespace Graph {
inline void Function(...) { return CGraph::Function(...); }
}

Ensuite, on fait pareil qu'avec la solution précédente...