Quand dois-je besoin d'une classe anonyme en C++?
Il y a une fonctionnalité appelée anonyme de classe en C++. C'est similaire avec anonyme struct en C. je pense que cette fonctionnalité est inventé en raison de certains besoins, mais je ne peux pas comprendre ce que c'est.
Puis-je avoir un exemple de ce qui a vraiment besoin de la classe anonyme?
Pourquoi avez-vous anonyme struct?
Ah ouais, vous avez raison. J'ai peut être la même raison pourquoi il existe sur C. en tout cas je suis curieux de connaître les cas spécifiquement pour le C++. Parce que le C++ est très différente de la langue avec C.
Ah ouais, vous avez raison. J'ai peut être la même raison pourquoi il existe sur C. en tout cas je suis curieux de connaître les cas spécifiquement pour le C++. Parce que le C++ est très différente de la langue avec C.
OriginalL'auteur Eonil | 2012-04-09
Vous devez vous connecter pour publier un commentaire.
La fonctionnalité est là parce que
struct
etclass
sont la même chose - quelque chose que vous pouvez faire avec l'un, vous pouvez le faire avec les autres. Il sert exactement le même but qu'un anonymestruct
dans C; si vous voulez grouper quelques trucs ensemble et de déclarer un ou plusieurs instances de celui-ci, mais n'avez pas besoin de référer à ce type de nom.C'est moins couramment utilisé en C++, en partie parce que le C++ conceptions ont tendance à être plus type, et en partie parce que vous ne pouvez pas déclarer les constructeurs ou destructeurs pour les classes.
OriginalL'auteur Mike Seymour
Il n'est pas vraiment nécessaire dans un sens strict et n'a jamais été. I. e. vous pouvez toujours donner un nom, par exemple
anonymous1
,anonymous2
etc. Mais garder une trace de plus de noms que nécessaire, c'est toujours une corvée.Où il est utile de se placer où l'on veut données de groupe sans donner un nom à ce groupe. Je pouvais venir avec plusieurs exemples:
Dans ce cas, le
int
et labool
appartiennent logiquement, il est donc logique de les regrouper. Cependant, pour cet exemple concret, il fait probablement de sens pour créer une véritable option de type ou d'utiliser l'un de ceux qui sont disponibles, parce que ce modèle est probablement utilisé à d'autres endroits aussi bien. Dans d'autres cas, ce modèle de regroupement peut être si spécial, qu'il mérite de rester dans cette classe seulement.J'ai vraiment présumer cependant, que les classes anonymes sont rarement utilisés (j'ai seulement utilisé une couple de fois dans ma vie probablement). Souvent, quand on veut regrouper des données, ce n'est pas de la classe ou de la portée spécifique, mais aussi d'un groupement qui fait aussi le sens à d'autres endroits.
bon point. Je pense qu'on devrait prendre soin de cette autre manière. Peut-être qu'avec C++11 dans la classe d'initialiseur ce serait faire. Comme je l'ai dit c'est probablement très rarement utilisé la fonction.
OriginalL'auteur LiKao
C'était peut-être parfois utile de faire des fonctions imbriquées comme:
Mais maintenant nous avons des lambdas et anonyme classes sont laissés seuls pour des raisons de compatibilité.
OriginalL'auteur Hauleth
L'utilisation de anonyme classes est pour préserver la compatibilité avec les C de code.
Exemple:
Dans du code C, l'utilisation de typedef, en collaboration avec l'anonymat des structures est très répandue.
OriginalL'auteur IndieProgrammer
Il est un exemple de anonyme les structures qui peuvent être utilisés avec Qt 5 du Signal/Slot système avec n'IMPORTE quelle classe et sans QObject dérivés exigence:
En gros, j'ai besoin de connecter une minuterie signal à un non-classe dérivée de QObject, mais souhaitez passer mt "ce" correctement.
QObject::connect peut être connecté à la fonction ordinaire dans Qt 5, de sorte que cette classe anonyme est en fait un foncteur qui maintient le pointeur this dans lui-même, toujours en passant la fente de connexion.
Au moment de la rédaction, de QObject, ne parvenait pas à comprendre ce qu'est un "Lambda", mais ils fixe par la suite.
OriginalL'auteur Петър Петров
Aussi, vous pouvez faire des choses avec auto anonyme (vs2015)
OriginalL'auteur zez