 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Frédéri MIAILLE Guest
|
Posted: Fri Jun 27, 2003 9:43 am Post subject: Re: Comment faire une bibliothèque ? |
|
|
"YaNn" <yann.prosper (AT) wanadoo (DOT) fr> a écrit dans le message de news:
bdfg1d$32a$1 (AT) news-reader1 (DOT) wanadoo.fr...
| Quote: | bonjour,
j'aimerai me faire une bibliothèque pour pouvoir initialiser
ma fenêtre OpenGL avec SDL sans avoir a passer par un code de genre:
MaClasse m;
m.initialise();
mais plutot directement initialise() tout en gardant les paramètres
dans des variables.
Dois-je vraiment passer par du C ou est-ce possible en C++ ?
Merci d'avance pour toute idée :)
Je comprend rien mais ce qui est certain, c'est que ce qui est possible en C |
l'est en C++.
Enfin à partir du moment ou ton compilateur supporte C et C++, tu peux
mélanger les deux.
Donc, normalement la réponse à ta question est "oui".
--
Frédéri MIAILLE
fr.comp.lang.c
fr.comp.lang.c++
fr.comp.os.ms-windows.programmation
fr.comp.graphisme.programmation
|
|
| Back to top |
|
 |
amerio Guest
|
Posted: Fri Jun 27, 2003 10:19 am Post subject: Re: Comment faire une bibliothèque ? |
|
|
| Quote: | En fait mon but est d'écrire une bibliothèque genre GLUT pour
l'initialisation d'un fenetre graphique et la gestion des evenements
claviers/Souris etc.... avec des pointeurs sur fonction. On enregistre
la fonction dont on va se servir pour afficher par exemple, et après on
lance la boucle principale de la bibliothèque qui se charge du reste :)
J'ai déjà pensé la faire sous forme d'objet, mais je n'aime pas le fait
de devoir l'instancié pour m'en servir. En gros cela serai une sorte de
module capable de gérer les différents paramètres et offrant quelques
fonctionnalités sympas. Le tout en encapsulant du SDL
|
Tu peux utiliser une classe dont tous les membres et methodes sont
statiques.
Les membres statiques seront instanciés 'derriere ton dos' par le compilo,
avant de rentrer dans main.
dans le .h :
class GL
{
public :
static bool Init();
private:
static bool m_bInit;
};
dans le .cpp :
bool GL::m_bInit = false; // en dehors de toute methode
bool GL::Init() { m_bInit=true;}
dans ton code:
if (GL::Init())
{
....
}
Mais si tu veux faire if (Init()) ... alors c'est du C, pas du C++ (donc tu
ecris pas de classe)
Cela dis, je prefere les singleton aux classes statiques (au moins tu
controles le moment de la construction et de la destruction)
|
|
| Back to top |
|
 |
YaNn Guest
|
Posted: Fri Jun 27, 2003 2:11 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
amerio wrote:
| Quote: | En fait mon but est d'écrire une bibliothèque genre GLUT pour
l'initialisation d'un fenetre graphique et la gestion des evenements
claviers/Souris etc.... avec des pointeurs sur fonction. On enregistre
la fonction dont on va se servir pour afficher par exemple, et après on
lance la boucle principale de la bibliothèque qui se charge du reste :)
J'ai déjà pensé la faire sous forme d'objet, mais je n'aime pas le fait
de devoir l'instancié pour m'en servir. En gros cela serai une sorte de
module capable de gérer les différents paramètres et offrant quelques
fonctionnalités sympas. Le tout en encapsulant du SDL :)
Tu peux utiliser une classe dont tous les membres et methodes sont
statiques.
Les membres statiques seront instanciés 'derriere ton dos' par le compilo,
avant de rentrer dans main.
dans le .h :
class GL
{
public :
static bool Init();
private:
static bool m_bInit;
};
dans le .cpp :
bool GL::m_bInit = false; // en dehors de toute methode
bool GL::Init() { m_bInit=true;}
dans ton code:
if (GL::Init())
{
....
}
Mais si tu veux faire if (Init()) ... alors c'est du C, pas du C++ (donc tu
ecris pas de classe)
Cela dis, je prefere les singleton aux classes statiques (au moins tu
controles le moment de la construction et de la destruction)
C'est exactement ce que je voulais savoir, merci  |
Pour l'instant j'ai résolu le problème en écrivant en C, mais je pense
que je vais le faire avec la classe statique.
Par contre tu parles des singletons, qu'est ce que c'est ?
|
|
| Back to top |
|
 |
amerio Guest
|
Posted: Fri Jun 27, 2003 2:41 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
| Quote: | Pour l'instant j'ai résolu le problème en écrivant en C, mais je pense
que je vais le faire avec la classe statique.
Par contre tu parles des singletons, qu'est ce que c'est ?
|
Un singleton est une classe qui ne peut avoir qu'une seule instance.
Ce n'est pas une classe statique car elle est instanciée 'à la main' ou lors
de sa 1ere utilisation.
Si on ne sent sert pas, elle n'est donc *jamais* instanciée
Typiquement :
class Singleton
{
public:
static Singleton* GetInstance() { return s_pThis ? s_pThis :
s_pThis = new Singleton; }
~Singleton(); // le destructeur est public!
void DoWork() {....}
static void DeleteMe() { if (s_pThis) delete
s_pThis; s_pThis = NULL;}
private:
Singleton() {} // le constructeur est privé!
static Singleton* s_pThis; // ne pas oublier d'ajouter dans le
..cpp : Singleton* Singleton::s_pThis = NULL;
};
Pour l'utiliser :
Singleton::GetInstance()->DoWork();
Et a la fin de ton prog : Singleton::DeleteMe();
pour alleger l'ecriture tu peux faire
#define TheSingleton (Singleton::GetInstance())
et taper :
TheSingleton->DoWork();
|
|
| Back to top |
|
 |
YaNn Guest
|
Posted: Fri Jun 27, 2003 3:34 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
C'est bizarre on ne nous apprend pas ca à l'école :)
On préfère nous gaver et nous faire haïr le C++ en nous bourrant
de surcharge d'opérateur, d'héritage et de STL sans nous expliquer
comment nous en servir.
amerio wrote:
| Quote: | Pour l'instant j'ai résolu le problème en écrivant en C, mais je pense
que je vais le faire avec la classe statique.
Par contre tu parles des singletons, qu'est ce que c'est ?
Un singleton est une classe qui ne peut avoir qu'une seule instance.
Ce n'est pas une classe statique car elle est instanciée 'à la main' ou lors
de sa 1ere utilisation.
Si on ne sent sert pas, elle n'est donc *jamais* instanciée
Typiquement :
class Singleton
{
public:
static Singleton* GetInstance() { return s_pThis ? s_pThis :
s_pThis = new Singleton; }
~Singleton(); // le destructeur est public!
void DoWork() {....}
static void DeleteMe() { if (s_pThis) delete
s_pThis; s_pThis = NULL;}
private:
Singleton() {} // le constructeur est privé!
static Singleton* s_pThis; // ne pas oublier d'ajouter dans le
..cpp : Singleton* Singleton::s_pThis = NULL;
};
Pour l'utiliser :
Singleton::GetInstance()->DoWork();
Et a la fin de ton prog : Singleton::DeleteMe();
pour alleger l'ecriture tu peux faire
#define TheSingleton (Singleton::GetInstance())
et taper :
TheSingleton->DoWork();
|
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Jun 30, 2003 8:12 am Post subject: Re: Comment faire une bibliothèque ? |
|
|
YaNn <yann.prosper (AT) wanadoo (DOT) fr> wrote
| Quote: | C'est bizarre on ne nous apprend pas ca à l'école
|
En effet. C'est une modèle de conception très répandu. Et les modèles de
conception, c'est devenu une partie du b a ba de la conception. Une
connaissance en est essentielle aussi pour trouver du travail -- depuis
au moins six ou sept ans, on m'en a questionné dans tous les entrevues
d'embauche.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Vivien Gallinaro Guest
|
Posted: Mon Jun 30, 2003 5:27 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
J'arrive un peu tard, désolé ;)
YaNn wrote:
| Quote: | amerio wrote:
Tu peux utiliser une classe dont tous les membres et methodes sont
statiques.
Les membres statiques seront instanciés 'derriere ton dos' par le
compilo, avant de rentrer dans main.
|
C'est goret, quand même ! Personnellement (à l'école justement ;-P ), on
m'a appris qu'une classe dont tous les membres sont statiques, c'est un
namespace.
| Quote: | Cela dis, je prefere les singleton aux classes statiques (au moins tu
controles le moment de la construction et de la destruction)
|
Dans ce cas là, effectivement, c'est différent. Cela dit, je n'ai qu'à
peine entendu parler des design patterns, et je me méprenais
complètement sur ce que ça pouvait être. Quand je vois ce petit exemple,
j'ai juste envie de demander si quelqu'un n'aurait pas une petite url
sur le sujet ;)
Vivien Gallinaro
|
|
| Back to top |
|
 |
Laurent Oget Guest
|
Posted: Mon Jun 30, 2003 5:41 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
Vivien Gallinaro <gallinar_PLONK_ (AT) mark (DOT) u-strasbg.fr> writes:
| Quote: | J'arrive un peu tard, désolé ;)
YaNn wrote:
amerio wrote:
Tu peux utiliser une classe dont tous les membres et methodes sont
statiques.
Les membres statiques seront instanciés 'derriere ton dos' par le
compilo, avant de rentrer dans main.
C'est goret, quand même ! Personnellement (à l'école justement ;-P ), on
m'a appris qu'une classe dont tous les membres sont statiques, c'est un
namespace.
Cela dis, je prefere les singleton aux classes statiques (au moins tu
controles le moment de la construction et de la destruction)
Dans ce cas là, effectivement, c'est différent. Cela dit, je n'ai qu'à
peine entendu parler des design patterns, et je me méprenais
complètement sur ce que ça pouvait être. Quand je vois ce petit exemple,
j'ai juste envie de demander si quelqu'un n'aurait pas une petite url
sur le sujet ;)
Vivien Gallinaro
|
a ma connaissance, pour le moment la reference pour les design patterns
est le livre du 'gang of four'.
http://www.bookpool.com/.x/7zxeo44zs1/sm/0201633612
j'en ai meme trouve une version en francais.
http://tinyurl.com/fnik
--
Laurent Oget, Ph.D. [email]laurent (AT) oget (DOT) net[/email] http://oget.net
Senior Engineer Zvolve Systems Inc http://zvolve.com
Chercheur Associé Liafa http://liafa.jussieu.fr
|
|
| Back to top |
|
 |
amerio Guest
|
Posted: Mon Jun 30, 2003 9:05 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
| Quote: | Tu peux utiliser une classe dont tous les membres et methodes sont
statiques.
Les membres statiques seront instanciés 'derriere ton dos' par le
compilo, avant de rentrer dans main.
C'est goret, quand même ! Personnellement (à l'école justement ;-P ), on
m'a appris qu'une classe dont tous les membres sont statiques, c'est un
namespace.
|
Pas tout a fait semblable. Un namespace est ouvert (on peut rajouter des
classes, des types,...) alors qu'une classe est fermée (après sa définition,
on ne peut rien rajouter).
Quant à dire que c'est "goret", c'est quand même utilisé dans bcp de lib,
notamment dès qu'il s'agit de faire une passerelle vers des lib C (pour
utiliser le fait qu'un callback C peut s'ecrire sous la forme d'une méthode
statique).
On se retrouve alors avec des classes mi-statiques, mi-classique : on a la
notion de "contexte" courant (la partie statique gérant le contexte courant,
les instances de la classes gérant les différents contextes).
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Mon Jun 30, 2003 9:43 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
"News Coil" <vkosse (AT) wanadoo (DOT) Fr> a écrit dans le message de
news:bdq8tv$nbk$1 (AT) news-reader1 (DOT) wanadoo.fr...
| Quote: | SI tu es sous windows, fais juste une dll ou bien sous linux kdevelop le
fait très bien.
"amerio" <amerio (AT) hotmail (DOT) com> a écrit dans le message de news:
Quant à dire que c'est "goret", c'est quand même utilisé dans bcp de
lib,
notamment dès qu'il s'agit de faire une passerelle vers des lib C (pour
utiliser le fait qu'un callback C peut s'ecrire sous la forme d'une
méthode
statique).
On se retrouve alors avec des classes mi-statiques, mi-classique : on a
la
notion de "contexte" courant (la partie statique gérant le contexte
courant,
les instances de la classes gérant les différents contextes).
|
Pourrais-tu préciser ce qu'une dll ou kdevelop fait très bien, stp ?
Chris
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Tue Jul 01, 2003 7:54 am Post subject: Re: Comment faire une bibliothèque ? |
|
|
Arnaud Meurgues <arnaud (AT) meurgues (DOT) non.fr.invalid> wrote
| Quote: | kanze (AT) gabi-soft (DOT) fr wrote:
C'est bizarre on ne nous apprend pas ca à l'école En effet. C'est
une modèle de conception très répandu. Et les modèles de conception,
c'est devenu une partie du b a ba de la conception. Une connaissance
en est essentielle aussi pour trouver du travail -- depuis au moins
six ou sept ans, on m'en a questionné dans tous les entrevues
d'embauche.
Mais tu n'es pas, et de loin, un jeune qui sort de l'école. On peut
supposer que tes entretiens d'embauche sont proportionnés aux
compétences que tu revendiquent.
|
Certainement, mais la différence est plutôt une question de profondeur,
et non d'étendue. À un débutant, on lui démandera ce qu'il entend par
« modèle de conception », et d'en citer les noms de deux ou trois. À
moi, on démandera une discussion détailée des alternatifs (mettons entre
le modèle template et la délégation), avec des pros et des contres de
chacun, ou on me soumettra un problème dont la solution utilise certains
modèles de conception.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Arnaud Meurgues Guest
|
Posted: Tue Jul 01, 2003 8:38 am Post subject: Re: Comment faire une bibliothèque ? |
|
|
Laurent Oget wrote:
| Quote: | a ma connaissance, pour le moment la reference pour les design patterns
est le livre du 'gang of four'.
j'en ai meme trouve une version en francais.
|
La traduction est franchement mauvaise. À n'utiliser que si l'on ne peut
pas lire l'anglais.
Arnaud
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Tue Jul 01, 2003 9:53 am Post subject: Re: Comment faire une bibliothèque ? |
|
|
"amerio" <amerio (AT) hotmail (DOT) com> writes:
| Quote: | Quant à dire que c'est "goret", c'est quand même utilisé dans bcp de
lib, notamment dès qu'il s'agit de faire une passerelle vers des lib
C (pour utiliser le fait qu'un callback C peut s'ecrire sous la
forme d'une méthode statique).
C'etait une pratique courante et c'est un extension commune mais c'est
pas autorise par la norme.
Tu es sur de toi ? Ref stp.
|
7.5 naturellement. Et plus precisement 7.5/1 (...Two functions type
with different language linkages are distinct types...), 7.5/4 (...A
C language linkage is ignored for the class members and the member
function...).
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
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Tue Jul 01, 2003 2:53 pm Post subject: Re: Comment faire une bibliothèque ? |
|
|
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote
| Quote: | "amerio" <amerio (AT) hotmail (DOT) com> writes:
Quant à dire que c'est "goret", c'est quand même utilisé dans
bcp de lib, notamment dès qu'il s'agit de faire une passerelle
vers des lib C (pour utiliser le fait qu'un callback C peut
s'ecrire sous la forme d'une méthode statique).
C'etait une pratique courante et c'est un extension commune mais
c'est pas autorise par la norme.
Tu es sur de toi ? Ref stp.
7.5 naturellement. Et plus precisement 7.5/1 (...Two functions type
with different language linkages are distinct types...), 7.5/4 (...A
C language linkage is ignored for the class members and the member
function...).
|
À ajouter : je me suis déjà servi des compilateurs où les conventions de
passage de paramètres n'étaient pas les même en C et en C++.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|