2011-10-01 2 views

Répondre

3

98 C++ introduit le mot-clé export qui vous a permis de ont la définition d'un modèle de fonction dans une autre unité de traduction, avec seulement sa déclaration nécessaire pour compiler le code qui l'utilise. (Voir here si vous êtes flou sur ce qu'est une définition par rapport à une déclaration.Au fond, vous pourriez avoir les modèles de fonction implémentation dans une autre unité de traduction.) C'est comme c'est le cas avec d'autres fonctions.

Cependant, seuls les compilateurs utilisant le frontal du compilateur EDG l'ont déjà supporté, et tous ne l'ont pas fait officiellement. En fait, le seul compilateur que je connaissais qui le soutenait officiellement était le Comeau C++. C'est pourquoi le mot-clé, malheureusement, a été retiré de C++ 11.

Je pense qu'il est sûr de dire qu'un système de module correct devrait guérir C++ de beaucoup de ses défauts qui entourent le modèle de compilation entier, mais, malheureusement, un système de module n'a pas été considéré comme quelque chose qui pourrait être abordé dans un délai raisonnable pour C++ 11. Nous devrons espérer la prochaine version de la norme.

+1

Pourquoi "malheureusement"? Même les auteurs de la caractéristique conviennent qu'elle était mal conçue et mal définie, et qu'il y aurait de meilleures façons d'aborder le problème. –

+2

@Ben: Malgré toutes ses imperfections, la nécessité de recompiler l'intégralité de votre projet a été supprimée car un modèle d'aide a été modifié. Il est uniquement utilisé par un modèle d'aide utilisé uniquement par un modèle inclus partout. Au moins, Daveed Vandervorde (qui l'a implémenté) a dit qu'il avait bien fourni cette fonctionnalité. A l'époque je travaillais pour une entreprise qui venait de dépenser un montant à cinq chiffres pour [IncrediBuild] (http://www.xoreax.com/visual_studio.htm), afin de nous rendre productifs malgré tous les changements d'aides modèles d'aide dans un projet plusieurs-MLoC. 'exporter' aurait été moins cher. – sbi

+0

Déprimé? Je pensais que c'était à plat. Une de ces choses qui ne casserait vraiment aucun code existant. –

0

Les modèles compilés séparément vous permettent d'importer des définitions de modèles d'une autre unité de traduction au lieu de devoir les définir dans chaque TU (normalement dans l'en-tête). Fondamentalement, ils sont ignorés car ils sont pratiquement impossibles à mettre en œuvre en termes de complexité et apportent un certain nombre d'effets secondaires regrettables.

+0

Je pense que toute implémentation de travail nécessiterait l'ajout de fichiers permanents à la compilation répertoire, donc ce serait vraiment une fonctionnalité assez intrusive. C'est parti maintenant, heureusement. –

+0

Euh, je me souviens de Borland C++ 3 ayant une compilation séparée de modèles. C'était il y a environ 20 ans. – sbi

Questions connexes