Quels sont les avantages (la liste des inconvénients possibles est longhâte) de faire 100% géré Strong> Développement à l'aide de C ++ / CLI (c'est-à-dire, compilez avec / CLR: Coffre-fort qui" génère ... des assemblages, comme ceux écrits dans ... C # ")? Surtout quand comporter C # (note C ++ / CLI: Avantages sur C # et Y a-t-il un avantage à l'utilisation de C ++ / CLI sur la norme C ++ ou C #? sont surtout à propos de Interop géant / non géré). P>
Par exemple, voici quelques-uns sur le dessus de ma tête: P>
C ++ - Références de style pour les types gérés , pas aussi élégant que plein soufflé non-nullable références mais mieux que rien ou en utilisant un Travailler sur a>. p> li>
Modèles plus puissants que les génériques P> LI>
préprocesseur (cela peut être un désavantage!, mais les macros peuvent être utiles pour la génération de code) p> li>
Stack Semantiques pour les types de référence - Appeler automatiquement Idisposable :: Disposer () EM> P> LI>
Mise en œuvre plus facile de Dispose () em> via C ++ Destructor P> Li>
ul>
C # 3.0 Ajout des propriétés modernes automatiques, de sorte que ce n'est plus un avantage C ++ / CLI. P>
7 Réponses :
impair, j'aime C ++ / CLI, mais vous avez répertorié ses fonctionnalités que je n'aime pas. Mes critiques: p>
Eh bien, c'est tout très subjectif peut-être. Le knell deathien viendra avec VS2010, il sera expédié sans support IntelliSense pour C ++ / CLI. P>
Où entendez-vous que le VS2010 déposera Intellisense pour C ++? Une recherche rapide dans Google pour "VS2010 Intellisense C ++" revient sans aucune amélioration de IntelliSense. -1 jusqu'à ce que vous puissiez prouver votre déclaration.
@Russ - pas pour C ++, pour C ++ / CLI, comme indiqué clairement dans mon message. Link: CodeGuru.com/forum/showthread.php?t=477959 Gimme mes points de retour, Dammit!
Bien que je pense que j'aurais préféré quelque chose de plus récent. ( connect.microsoft.com/visualstudio/feedback/... ). Je vais le prendre. +1 pour fournir des preuves.
Argh, débordement de pile dit que mon vote est trop vieux pour moi, à moins que la réponse est modifiée. (+1 sur votre commentaire avec la preuve)
Dans la normale C ++, si un constructeur jette, tout objet qui a été construit dans le cadre de celui-ci aura leurs destructeurs. Est-ce que c ++ / cli fait ça? Si tel est le cas, cela semblerait être un avantage sur C # qui peut parfois rendre il très difficile de construire des hiérarchies de classe qui ne fuient pas quand un constructeur jette.
Cette réponse m'a éclaté à certaines des négatifs de C ++ rarement rarement rarement. Je voudrais suggérer une modification qui apporterait la mise au point de la question dans la réponse qui facilite beaucoup la tâche. Pour lire sans faire défiler le haut de la page à chaque point de balle. En outre, je pense que cela pourrait être une bonne idée d'élaborer le point de préprocesseur; Il est peut-être comparer la puissance expressive du langage de prétraitement (ou plutôt un manque de) à d'autres langues de traitement de texte (par exemple PERL, pas que je recommanderais que la langue) pourrait avoir un sens.
Je pense que le plus grand avantage est le plus grand avantage est géré / non géré. Écriture pure gérée C ++ / CLI (pour moi au moins) sans interoper avec C # ou d'autres langues .Net semble manquer le point entièrement. Ouais tu pourrais faire ça, mais pourquoi voudriez-vous. P>
Si vous allez écrire du code géré pur, pourquoi ne pas utiliser c #. Surtout (comme les Nobugs a déclaré) si VS2010 goutte la prise en charge IntelliSense pour C ++ / CLI. Également en VS2008, l'IntelliSense pour C ++ / CLI n'est pas aussi bon le C # IntelliSense; Donc, d'un point de vue du développeur, il est plus facile de travailler / explorer / refacteur en C # que c ++ / cli. p>
Si vous souhaitez que certains des avantages de C ++ vous listez comme le préprocesseur, la sémantique de la pile et les modèles, alors pourquoi ne pas utiliser C ++? P>
C ++ / CLI est affreux pour tout sauf interop. Vous frappez le clou sur la tête avec le commentaire de l'utilisation de C # si vous vouliez écrire des assemblys gérés.
@Dan, je ne suis pas convaincu que ceux qui sont seuls suffisants pour balayer la facilité de développement et le meilleur soutien de l'IDE de C #
Comme les autres ici, je ne peux penser à aucun cas général où il existe un avantage clair, alors ma pensée s'est tournée vers des avantages de la situation - existe-t-il des cas où il y a un avantage dans un scénario particulier? P>
laissez-moi élaborer ... p>
J'ai travaillé un peu avec des scientifiques et des ingénieurs (non logiciels) qui ne sont pas des programmeurs formellement formés. Beaucoup de ces personnes utilisent C ++ pour développer des modules spécifiques impliquant une physique / mathématiques haut de gamme. Si un module PURE .NET est requis dans un scénario de prototypage rapide et que le jeu de compétences du scientifique / ingénieur responsable du module est C ++, je leur enseignerais une petite quantité de syntaxe supplémentaire ( Je reconnais qu'il y a un tas de réponses possibles "oui, mais ...", mais je pense que tirer parti de l'ensemble des compétences C ++ du personnel technique est un avantage possible de C ++ / CLI. p> ref code>,
^ code> et
% code> et
gcnew code>) et faites-les de programmer leur module sous forme de dll C ++ / CLI géré 100%. P>
Je suis d'accord sur ce que vous avez mentionné et comme exemple de préprocesseur d'utilisation point à: Boost Prepprocessor Bibliothèque pour générer un ensemble de types basé sur une liste de types de base, par exemple POITI32, POINTF32, etc. dans C ++ / CLI P>
en C ++ / CLI, vous pouvez définir des fonctions en dehors des classes, vous ne pouvez pas le faire en C #. Mais je ne sais pas si c'est un avantage p>
On pourrait imaginer les exigences suivantes pour un produit hypothétique: p>
Dans un tel scénario, en utilisant, par exemple, c # pour 1 vous timie sur 2 et 3 sans réécriture. Ainsi, on pourrait se développer en C ++ / CLI, de manière appropriée avec des macros et des modèles de shenanigans afin de ressembler autant que possible C ++ que possible, de frapper le REQT 1, puis de frapper Reqt 2 il aurait besoin de (a) réemployer lesditives de macros et de modèles shenanigans Pour cartographier sur Pukka C ++ et (B) Mettre en œuvre les classes de framework .NET utilisées à Pukka C ++. Notez que (a) et (b) pourraient être réutilisés à l'avenir une fois effectué une fois. P>
L'objection la plus évidente serait "bien pourquoi ne pas faire tout le tout dans natif c ++ alors?"; Bien peut-être qu'il y a beaucoup de bonnes choses dans la vaste bibliothèque de classe que vous souhaitez utiliser pour vous rendre au marché dès que possible. P>
Tout un peu ténu, j'admets, alors je doute beaucoup cela ait été fait, mais ce serait une chose amusante à essayer! p>
Vous pouvez avoir des problèmes et des délégués en tant que contraintes génériques en C ++ / CLI, mais pas en C #. P>
Il y a une bibliothèque pour simuler ces contraintes dans C #. p>
Stackoverflow.com/questions/1886881/C-Cli-Advantages -over-c