Partage
  • Partager sur Facebook
  • Partager sur Twitter

autoriser l'accès d'une méthode uniquement

le friend marche pas à ma connaissance

    21 mars 2019 à 14:53:44

    Bonjour,

    le friend permet de donner accès à toutes les méthode private d'une classe à:

    • une autre classe
    • une méthode d'une autre classe.

    A l'inverse je voudrais donner accès à une seule méthode pour:

    • une autre classe
    • une méthode d'une autre classe.

    En fait j'ai un singleton que j'aimerais rendre disponible en lecture pour l'ensemble du code, mais en écriture pour certaines classes uniquement. J'ai constifier tout correctement, il faudrait simplement que j'ai:

    • public: const Manager& GetInstance(); 
    • Manager& GetInstance(); uniquement visible par 2 autres classes.

    Comme ça je suis sur que personne d'autre n'aura l'idée de faire n'importe quoi avec ce manager ^^

    Existe t il une solution simple/peu couteuse? Ou est ce que je suis obligé de faire de l'héritage privée + using pour filtrer ce que je veux publier vers l’extérieur? (car si c'est trop complexe, autant utiliser le friend qui marche bien. Tant pis si les autres classes ont accès à trop de méthodes)

    Merci,

    -
    Edité par fred1988 21 mars 2019 à 14:55:36

    • Partager sur Facebook
    • Partager sur Twitter
      21 mars 2019 à 15:33:25

      Faut une clé https://arne-mertz.de/2016/10/passkey-idiom/

      Honnêtement, c'est s'*mm*rd*r pour rien.

      Déjà tu pars d'un singleton alors bon... côté désign c'est pas une clé qui va racheter l'utilisation d'une globale

      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        21 mars 2019 à 16:02:13

        tu as une astuce pour te passer de l'utilisation d'un singleton dans la plus part des cas?

        J'ai souvent entendu et lu que c'etait pas bien. Mais on a souvent besoin d'aller chercher des infos stocker dans une classe bien particulière et unique. Je vois pas comment m'en passer dans le cas présent. Peut être as tu un article à partager?

        En tout cas merci pour le lien, je connaissais pas ce pattern!

        • Partager sur Facebook
        • Partager sur Twitter
          21 mars 2019 à 16:11:40

          En fait, on peut se passer de singleton dans la plupart des cas.

          Le problème du singleton, c'est que ça ajoute une dépendance implicite et masquée.
          Pour résoudre ce soucis, on rend donc cette dépendance explicite, en passant directement l'instance à la fonction qui en a besoin.
          Une fois qu'on a fait ça, on n'a plus besoin que le singleton soit un singleton.

          • Partager sur Facebook
          • Partager sur Twitter

          Si vous ne trouvez plus rien, cherchez autre chose.

            21 mars 2019 à 16:44:30

            je comprends que c'est faisable, mais je ne sais pas si c'est très pratique de passer voir stocker un pointeur vers l'instance d'une classe qui est utilisée dans beaucoup, BEAUCOUP d'endroit.

            En l’occurrence je l'utilise dans 42 méthodes différentes réparties dans plus de 10 classes, et à l'avenir on devrait le trouver dans plusieurs autres méthodes. Je sais pas si l'utilisation d'un singleton n'est pas plus propre dans des cas extrèmes comme celui ci.

            • Partager sur Facebook
            • Partager sur Twitter
              21 mars 2019 à 17:06:46

              Disons que cela devient tellement extrême ce que tu décris que ça me fait peur. D'autant que tu as sous-entendu que son état est altérable depuis certains endroits et pas depuis d'autres -- donc problèmes potentiels de concurrence

              Je m'autorise les singletons dans les cas suivants aujourd'hui

              - système de logs, initialisation obligatoirement explicite
              - paramètres de l'application, initialisation obligatoirement explicite
              - initialisation de sous-modules partagés un peu tricky qui ont besoin de s'attribuer des ressources une fois pour toutes pour bosser, initialisation paresseuse

              -
              Edité par lmghs 21 mars 2019 à 17:07:11

              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                26 mars 2019 à 14:02:51

                Mouais...

                Je ne vois rien d'extrême dans ce que tu décris... 42 méthodes pour 10 classes, c'est un nombre ridiculement petit.

                Le Singleton est une solution moche et sale, même dans les cas justifiés. (Dans mon moteur 3D je n'en ai qu'un seul, pour le log, avec initialisation et cleanup explicites).

                • Partager sur Facebook
                • Partager sur Twitter

                Si vous ne trouvez plus rien, cherchez autre chose.

                autoriser l'accès d'une méthode uniquement

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown