L'utilisation de locaux de classe en C++ la fonction
Je vois un certain usage interne struct en c++ la fonction.
Il y a une interface commune IBase. Voici le projet de code.
class IBase
{
virtual Method()=0;
}
vector<IBase*> baseList;
Alors une fonction définie une classe interne basé sur cette IBase, puis poussez l'intérieur de la classe de l'objet dans le baseList.
void func()
{
struct Object : public IBase
{
virtual Method()
{
//Method of Object in func
}
}
IBase* base = new Object();
baseList->push(base);
}
Il semble étrange d'utilisation, mais une bonne mise en œuvre de message/événement de création de modèle.
Autres threads peut-être utiliser cette baseList pour gérer l'événement entrant.
Quelle est la portée de l'interne de la structure de "struct Objet"? C'est très intéressant. S'il y a des documents à parler à ce sujet?
Vous devez vous connecter pour publier un commentaire.
La portée des classes locales est la fonction dans laquelle elles sont définies.Mais ce n'est pas intéressant en soi.
Ce qui rend les classes intéressant, c'est que si ils mettent en œuvre une interface (comme votre code ne), vous pouvez ensuite créer des instances de celui-ci (à l'aide de
new
) et les retourner (par exemple, commestd::vector<IBase*>
), ce qui fait la mise en œuvre accessible à travers la base de pointeur de classe même en dehors de la fonction.Certains autres faits concernant les classes locales:
Ils ne peuvent pas définir de membre statique des variables.
Ils ne peuvent pas accéder non "automatique" des variables locales de la fonction englobante. Mais ils peuvent accéder à la
static
variables.Ils peuvent être utilisés dans le modèle de fonctions.
Si ils sont définis à l'intérieur d'un modèle de fonction, ils peuvent utiliser les paramètres du modèle de la fonction englobante.
Classes locales sont finales, ce qui signifie que les utilisateurs en dehors de la fonction ne peut pas dériver de classe locale à la fonction. Sans classes locales, vous devez ajouter un sans nom d'espace de noms séparés de l'unité de traduction.
Locaux de classes sont utilisées pour créer trampoline fonctions généralement connu sous le nom thunks.
MODIFIER
Quelques références de la Norme (2003)
9.8 Local déclarations de classe [classe.local]
virtual
fonctions peuvent les utiliser.func()
.\4. Un local de classe ne doit pas avoir des données membres statiques.
MAIS vous pouvez le faire, à l'intérieur d'un local de classe
_local::nombre peut être utilisé pour lire et écrire le contraire variable statique
-aydin
C'est normal C++. Le portée de
struct Object
est uniquement la fonctionfunc
. Cependant, vous pouvez toujours utiliser des objets de ce type sans savoir de quel type de béton qu'ils sont, puisqu'ils héritent deIBase
. Ce est utilisé pour encapsuler la mise en œuvre.Une utilisation très intéressante d'une classe locale est présenté par Jason Turner dans son CppCon parler axé sur des programmes de Commodore 64 jeu en C++17. Il montre comment utiliser le RAII principe sur le niveau de la fonction.
Fondamentalement il établit des invariants dans le constructeur d'une classe locale dans une fonction retournant une instance de cette classe. Les invariants de la durée est donc contrôlée par la durée de vie de l'objet retourné. Il est assez similaire à ce que RAII wrappers comme
std::lock
faire, il suffit de légèrement différent.Vous pouvez voir la partie appropriée ici, mais je amour sa performance et recommande de voir tout le chemin à travers.