Question

ma question est la fréquence utilisez-vous vraiment classes imbriquées dans votre pratique et dans quels cas? quelle est la puissance réelle des classes imbriquées, ce qui ne peut se faire sans eux? Post-scriptum S'il vous plaît ne pas expliquer ce qui est, je le sais (from technical point of view)

Était-ce utile?

La solution

J'utilise habituellement des classes imbriquées pour intégrer des objets Finders (à utiliser avec std::find_if) dans mes types spécifiques.

Quelque chose comme:

// Dummy example
class Foo
{
  public:
    class finder
    {
      public:

        finder(int value) : m_value(value) {};

        bool operator()(const Foo& foo) { return (foo.m_int_value == value); }

      private:

        int m_value;
    };

   private:

     int m_int_value;

     friend class finder;
};

Alors:

vector<Foo> foo_list;
vector<Foo>::iterator foo = 
  std::find_if(foo_list.begin(), foo_list.end(), Foo::finder(4));

Cela pourrait bien sûr être fait sans l'utilisation de classes imbriquées. Mais je trouve assez élégante, car le viseur n'a pas d'usage en dehors de la définition de la classe:

Si jamais je supprime la classe en cas de code refactoring le viseur doit être supprimé aussi bien.

Autres conseils

Je les utilise rarement pour les raisons suivantes:

  • Ils ont tendance à être mise en œuvre les détails que je n'aime pas avoir en le fichier d'en-tête.
  • Je ne aime pas la syntaxe.

Parfois, j'utilise EMBEDDED struct (pour POD, aucune méthode).

Ils sont utiles quand un besoin de classe pour contenir groupées / données encapsulées. Vous pouvez concevoir tout dans une private classe imbriquée pour empêcher toute utilisation non autorisée du type de données par le monde extérieur.

Il peut également être utilisé comme un moyen peut-être plus claire pour accomplir l'amitié. L'imbrication de la classe au lieu d'utiliser l'amitié que vous encapsulez davantage les relations de friend entre les parties de code.

Je les utilise comme des classes de services publics qui ont besoin d'accéder ma classe: les gestionnaires de signaux, minuteries, en particulier lors de l'utilisation Pimpl, de sorte que la mise en œuvre est déjà dans un fichier cpp-
. Il n'y a rien en C ++ qui ne peut être fait sans classes imbriquées, mais il est une belle façon de champ limite ces classes qui la plupart du temps juste distribuent des événements dans ma classe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top