• [^] # Re: bonne idée

    Posté par . En réponse au journal Article sur la programmation C++. Évalué à 3.


    pourquoi la méthode get n'appelle pas init directement dans le cas ou on ne veut pas nécessairement gérer la durée de vie de l'objet ?

    La méthode templatisée utilise la gestion du cycle de vie, mais comme tu viens de le montrer, il est très simple de d'automatiser l'initialisation. Enfin je ne sais pas pour toi, mais sur les gros projets, moi j'aime bien regrouper l'initialisation de managers à un même endroit, et les gérer comme qu'il faut. Dans ton cas, si je rajoute du code utilisant get() ailleurs, je peux ne pas remarquer que l'initialisation a été appelée à un autre moment. Cela peut poser problème (testé par moi-même :p)


    il y a-t il un moyen élégant de passer des paramètres au constructeur de T ?

    Mhh... Là cela devient un peu violent, je n'ai jamais essayé ;
    Une idée, juste comme ça:
    - Définir une classe générique ctor_param servant à contenir divers paramètres.
    - Dériver ctor_param pour tes différents types de classes 'singletonisées'.
    - Passer un second paramètre template à Singleton, et un paramètre de type ctor_param* à init().
    - Fais un dynamic_cast<second_parametre_de_template*>(parametre_de_init).

    Et voilà, tu as tout comme tu veux.

    Ne me demande pas si c'est optimal, mais ça me parait propre et efficace.

    De toute manière, je n'ai jamais eu besoin de le faire.


    après le "delete instance ;", ne serait-il pas plus judicieux de mettre "instance=NULL;" ???

    Tout a fait, c'est un oublie de ma part, merci de me l'avoir fais remarqué :) Je corrige tout de suite.


    une version thread safe pourrait être sympa à développer aussi :-)

    Boaf, c'est trivial, et à moins d'utiliser une lib externe, c'est pas cross-platform, donc bon. De tte manière, un mutex à l'initialisation, un à la libération, et c'est ok.


    sinon, une sortie en html ou pdf est une bonne idée.


    pdf, il y en a une. Pour l'html, ça viendra sans doute si j'arrive à faire cracher du xhtml strict à latex2html, et à lui faire comprendre l'utf-8.