C ++ Signatures

Original: http://www.csc.lsu.edu/~gb/Signatures/index.html


Quelles sont les signatures de toute façon?
En gros, les signatures sont des abstractions de type ou d’interfaces de classes. Ils sont liés à la signature de ML, catégories Axiom, des modules de définition en Modula-2, modules d’interface en Modula-3, et les types dans la piscineje.

Les principales constructions ajoutées linguistiques sont des signatures et des pointeurs de signature. Par exemple, la déclaration de signature

signature S
{
int foo (void);
int bar (int);
};

définit un nouveau type abstrait S avec fonctions membres int foo (void) et int bar (int). Types de signatures ne peuvent être instanciés, car ils ne permettent pas de mise en oeuvre. Seuls les pointeurs de signature et des références de signature peuvent être définis. Par exemple,

C obj;
S * p = & obj;

définit une signature pointeur p et est initialisée à pointer vers un objet de type de classe C, C est nécessaire pour contenir les fonctions membres publiques int foo (void) et int bar (int). L’appel de fonction de membre

int i = p> foo ();

executes then obj.foo ().

Classe C est appelé une mise en œuvre du type abstrait S. Dans cet exemple, nous aurions pu faire un S de classe virtuelle abstraite et C une sous-classe de S, et nous aurions eu le même effet. Les avantages de signatures sur les classes virtuelles sont abstraites

  •      vous pouvez construire une hiérarchie de type séparé de l’héritage de classe (mise en œuvre) hiérarchie,
  •      sous-typage devient découplée de l’héritage (partage de code), et
  •      signatures peuvent être utilisés avec les classes compilées, alors que vous ne pouvez pas équiper une classe virtuelle abstraite au-dessus de hiérarchies de classes compilées.

Comment puis-je utiliser?
Pour expérimenter avec signatures, obtenir une copie de GCC, version 2.6.0 ou supérieure, de préférence la version 2.95. Une version de test bêta de ma mise en œuvre de signatures est inclus dans le communiqué. Tout ce que vous devez faire est d’utiliser l’option g ++ en ligne de commande

-fhandle signatures

pour la compilation de code C ++ contenant les signatures.


Qu’est-ce en œuvre et quelle est pas?
Déclarations de signature et des pointeurs de signature sont mises en œuvre et de travail. Pour des exemples de ce qui fonctionne et comment les utiliser, vous pouvez jeter un oeil sur les fichiers de test.

Les bogues suivants sont connus:

  •      Le destructeur d’objets ne peut pas être appelé si pointeurs de signature.
  •      Les fonctions de membre de la classe qui sont hérités d’une classe de base virtuelle ne sont pas appelés correctement via un pointeur de signature.
  •      Le contrôle de conformité signature ne fonctionne pas si la signature contient d’autres déclarations de signature ou de déclarations de classe.
  •      Fonctions de commande et de membres de l’opérateur de conversion de signatures ne peuvent être appelés avec la fonction appel syntaxe, comme p> opérateur + (17), mais pas avec l’opérateur ou de la syntaxe de conversion.


Les constructions et les caractéristiques suivantes de la langue ne sont pas encore mises en œuvre:

  •      constantes dans les signatures,
  •      références de signature,
  •      héritage de signature,
  •      SIGOF (signature d’une classe) de construire,
  •      vues (pas même l’analyse est faite),
  •      modèles de signature, et
  •      spécifications d’exception à la signature des déclarations de fonctions de membre.


Les éléments ci-dessus sont à peu près dans l’ordre dans lequel ils seront mis en œuvre.

Outre des corrections de bogues, les principales caractéristiques qui ont été mises en œuvre depuis la dernière version sont mises en œuvre par défaut des fonctions de membres de signature et de types opaques. Les classes qui sont définies en utilisant l’héritage multiple peuvent désormais être utilisés comme des implémentations de types de signature.

Pour des exemples de ce qui fonctionne et ce qui ne pas voir les fichiers de test dans la suite de tests de signature. Tous les programmes de test sont censés imprimer “PASS\n” sur la sortie standard si compilé avec G ++ 2.7.2.

Comments are closed.