le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des
initialisation puor des objets globaux (des objets qui font chercher
leur configuratin dans le systeme) et ceci pour des raison
d'optimisation (en gros, je veux pas faire un getenv/parse a chaque
appel de fonction).
Jusque maintenant, l'ordre de construction de mes objets
qui contiennent donc des membres static, ne me posait pas de probleme.
J'aimerai avoir un nouveau comportement ou je dois creer un objet global
avant le main. Et la, ca me pose probleme. En effet, rien ne me garantie
l'ordre de construction des objets. Hors, ce nouvel objet a besoin que tout
soit initialiser avant d'etre construit lui-meme.
J'ai deja trouve des solutions peu elegantes. Auriez-vous une idée de solution
élégante a me proposer ? Par exemple, un truc d'heritage qui me serait pas
venu ?
En vous remerciant par avance. Cordialement. Doms.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
"Dominique Vaufreydaz" writes:
Bonjour,
le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des initialisation puor des objets globaux (des objets qui font chercher leur configuratin dans le systeme) et ceci pour des raison d'optimisation (en gros, je veux pas faire un getenv/parse a chaque appel de fonction).
* On peut utiliser le fait que dans une unite de compilation, les variables globales sont construites dans leur ordre d'apparition.
* On peut utiliser le fait que les variables locales statiques sont intialisees au premier appel d'une fonction. On fait une fonction qui retourne une reference vers cette variable locale statique.
* On peut utiliser le fait que l'initialisation des variables globales commence par unitialisation a 0. On fait un fonction retournant une reference vers la variable globale qui commence par tester si une variable globale auxilliaire est nulle et dans ce cas initialise.
On peut encapsuler cela dans une classe singleton. Faire une recherche sur ce mot cle devrait donner des exemples et d'autres variations.
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
"Dominique Vaufreydaz" <Doms@invalid> writes:
Bonjour,
le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des
initialisation puor des objets globaux (des objets qui font chercher
leur configuratin dans le systeme) et ceci pour des raison
d'optimisation (en gros, je veux pas faire un getenv/parse a chaque
appel de fonction).
* On peut utiliser le fait que dans une unite de compilation, les
variables globales sont construites dans leur ordre d'apparition.
* On peut utiliser le fait que les variables locales statiques sont
intialisees au premier appel d'une fonction. On fait une fonction qui
retourne une reference vers cette variable locale statique.
* On peut utiliser le fait que l'initialisation des variables globales
commence par unitialisation a 0. On fait un fonction retournant une
reference vers la variable globale qui commence par tester si une variable
globale auxilliaire est nulle et dans ce cas initialise.
On peut encapsuler cela dans une classe singleton. Faire une recherche sur
ce mot cle devrait donner des exemples et d'autres variations.
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
le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des initialisation puor des objets globaux (des objets qui font chercher leur configuratin dans le systeme) et ceci pour des raison d'optimisation (en gros, je veux pas faire un getenv/parse a chaque appel de fonction).
* On peut utiliser le fait que dans une unite de compilation, les variables globales sont construites dans leur ordre d'apparition.
* On peut utiliser le fait que les variables locales statiques sont intialisees au premier appel d'une fonction. On fait une fonction qui retourne une reference vers cette variable locale statique.
* On peut utiliser le fait que l'initialisation des variables globales commence par unitialisation a 0. On fait un fonction retournant une reference vers la variable globale qui commence par tester si une variable globale auxilliaire est nulle et dans ce cas initialise.
On peut encapsuler cela dans une classe singleton. Faire une recherche sur ce mot cle devrait donner des exemples et d'autres variations.
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
Michel Decima
"Dominique Vaufreydaz" writes:
Bonjour,
le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des initialisation puor des objets globaux (des objets qui font chercher leur configuratin dans le systeme) et ceci pour des raison d'optimisation (en gros, je veux pas faire un getenv/parse a chaque appel de fonction).
* On peut utiliser le fait que dans une unite de compilation, les variables globales sont construites dans leur ordre d'apparition.
* On peut utiliser le fait que les variables locales statiques sont intialisees au premier appel d'une fonction. On fait une fonction qui retourne une reference vers cette variable locale statique.
* On peut utiliser le fait que l'initialisation des variables globales commence par unitialisation a 0. On fait un fonction retournant une reference vers la variable globale qui commence par tester si une variable globale auxilliaire est nulle et dans ce cas initialise.
On peut encapsuler cela dans une classe singleton. Faire une recherche sur ce mot cle devrait donner des exemples et d'autres variations.
En dernier recours, sur certains systemes, on peut piloter l'ordre d'initialisation des variables statiques en affectant des priorites aux differentes unites de compilation. Bien entendu, c'est pas portable ni standard.
"Dominique Vaufreydaz" <Doms@invalid> writes:
Bonjour,
le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des
initialisation puor des objets globaux (des objets qui font chercher
leur configuratin dans le systeme) et ceci pour des raison
d'optimisation (en gros, je veux pas faire un getenv/parse a chaque
appel de fonction).
* On peut utiliser le fait que dans une unite de compilation, les
variables globales sont construites dans leur ordre d'apparition.
* On peut utiliser le fait que les variables locales statiques sont
intialisees au premier appel d'une fonction. On fait une fonction qui
retourne une reference vers cette variable locale statique.
* On peut utiliser le fait que l'initialisation des variables globales
commence par unitialisation a 0. On fait un fonction retournant une
reference vers la variable globale qui commence par tester si une variable
globale auxilliaire est nulle et dans ce cas initialise.
On peut encapsuler cela dans une classe singleton. Faire une recherche sur
ce mot cle devrait donner des exemples et d'autres variations.
En dernier recours, sur certains systemes, on peut piloter l'ordre
d'initialisation des variables statiques en affectant des priorites
aux differentes unites de compilation.
Bien entendu, c'est pas portable ni standard.
le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des initialisation puor des objets globaux (des objets qui font chercher leur configuratin dans le systeme) et ceci pour des raison d'optimisation (en gros, je veux pas faire un getenv/parse a chaque appel de fonction).
* On peut utiliser le fait que dans une unite de compilation, les variables globales sont construites dans leur ordre d'apparition.
* On peut utiliser le fait que les variables locales statiques sont intialisees au premier appel d'une fonction. On fait une fonction qui retourne une reference vers cette variable locale statique.
* On peut utiliser le fait que l'initialisation des variables globales commence par unitialisation a 0. On fait un fonction retournant une reference vers la variable globale qui commence par tester si une variable globale auxilliaire est nulle et dans ce cas initialise.
On peut encapsuler cela dans une classe singleton. Faire une recherche sur ce mot cle devrait donner des exemples et d'autres variations.
En dernier recours, sur certains systemes, on peut piloter l'ordre d'initialisation des variables statiques en affectant des priorites aux differentes unites de compilation. Bien entendu, c'est pas portable ni standard.
Dominique Vaufreydaz
Bonjour,
* On peut utiliser le fait que dans une unite de compilation, les variables globales sont construites dans leur ordre d'apparition.
Le probleme etant qu'il y a bien entendu differentes unites.
* On peut utiliser le fait que les variables locales statiques sont intialisees au premier appel d'une fonction. On fait une fonction qui retourne une reference vers cette variable locale statique.
Mouai, j'y ai penser aussi... Ca faisait parties des solutions non élégantes.
* On peut utiliser le fait que l'initialisation des variables globales commence par unitialisation a 0. On fait un fonction retournant une reference vers la variable globale qui commence par tester si une variable globale auxilliaire est nulle et dans ce cas initialise.
Marche pas ou pas sur les instances d'objet ! J'ai eu le probleme sous gcc et Visual C++. Le probleme etant que si on objet en utilise un défini dans une autre unité, alors il l'initialise et ensuite pouf l'objet et remis a 0 par le constructeur de celui-ci
On peut encapsuler cela dans une classe singleton. Faire une recherche sur ce mot cle devrait donner des exemples et d'autres variations.
Je vais voir ca, merci. Doms.
Bonjour,
* On peut utiliser le fait que dans une unite de compilation, les
variables globales sont construites dans leur ordre d'apparition.
Le probleme etant qu'il y a bien entendu differentes unites.
* On peut utiliser le fait que les variables locales statiques sont
intialisees au premier appel d'une fonction. On fait une fonction qui
retourne une reference vers cette variable locale statique.
Mouai, j'y ai penser aussi... Ca faisait parties des solutions
non élégantes.
* On peut utiliser le fait que l'initialisation des variables globales
commence par unitialisation a 0. On fait un fonction retournant une
reference vers la variable globale qui commence par tester si une
variable globale auxilliaire est nulle et dans ce cas initialise.
Marche pas ou pas sur les instances d'objet ! J'ai eu le probleme
sous gcc et Visual C++.
Le probleme etant que si on objet en utilise un défini dans
une autre unité, alors il l'initialise et ensuite pouf l'objet et
remis a 0 par le constructeur de celui-ci
On peut encapsuler cela dans une classe singleton. Faire une
recherche sur ce mot cle devrait donner des exemples et d'autres
variations.
* On peut utiliser le fait que dans une unite de compilation, les variables globales sont construites dans leur ordre d'apparition.
Le probleme etant qu'il y a bien entendu differentes unites.
* On peut utiliser le fait que les variables locales statiques sont intialisees au premier appel d'une fonction. On fait une fonction qui retourne une reference vers cette variable locale statique.
Mouai, j'y ai penser aussi... Ca faisait parties des solutions non élégantes.
* On peut utiliser le fait que l'initialisation des variables globales commence par unitialisation a 0. On fait un fonction retournant une reference vers la variable globale qui commence par tester si une variable globale auxilliaire est nulle et dans ce cas initialise.
Marche pas ou pas sur les instances d'objet ! J'ai eu le probleme sous gcc et Visual C++. Le probleme etant que si on objet en utilise un défini dans une autre unité, alors il l'initialise et ensuite pouf l'objet et remis a 0 par le constructeur de celui-ci
On peut encapsuler cela dans une classe singleton. Faire une recherche sur ce mot cle devrait donner des exemples et d'autres variations.
Je vais voir ca, merci. Doms.
Dominique Vaufreydaz
Bonjour,
En dernier recours, sur certains systemes, on peut piloter l'ordre d'initialisation des variables statiques en affectant des priorites aux differentes unites de compilation. Bien entendu, c'est pas portable ni standard.
Les 2 sont obligatoires pour moi. Merci de l'info. Doms.
Bonjour,
En dernier recours, sur certains systemes, on peut piloter l'ordre
d'initialisation des variables statiques en affectant des priorites
aux differentes unites de compilation.
Bien entendu, c'est pas portable ni standard.
Les 2 sont obligatoires pour moi. Merci de l'info. Doms.
En dernier recours, sur certains systemes, on peut piloter l'ordre d'initialisation des variables statiques en affectant des priorites aux differentes unites de compilation. Bien entendu, c'est pas portable ni standard.
Les 2 sont obligatoires pour moi. Merci de l'info. Doms.