78 votes

Pourquoi Visual C++ ne dispose-t-il pas de la fonctionnalité de refactorisation ?

Lorsque l'on programme en C++ dans Visual Studio 2008, pourquoi n'y a-t-il pas de fonctionnalité comme celle que l'on voit dans le menu de refactorisation lorsqu'on utilise C# ?

J'utilise Renommer constamment et ça vous manque vraiment quand il n'est pas là. Je suis sûr qu'il existe des plugins qui proposent cette fonctionnalité, mais pourquoi n'est-elle pas intégrée à l'EDI lorsque l'on utilise C++ ? Est-ce dû à une erreur dans la façon dont le C++ doit être analysé ?

1 votes

Le refactoring est difficile pour le C++ mais j'ai l'impression que VS devrait ajouter un Rename all une sorte de fonctionnalité comme celle de Xcode C++.

70voto

JSBձոգչ Points 25069

La syntaxe et la sémantique du C++ font qu'il incroyablement difficile pour implémenter correctement la fonctionnalité de refactoring. Il est possible d'implémenter quelque chose de relativement simple pour couvrir 90% des cas, mais dans les 10% de cas restants, cette solution simple va horriblement casser votre code en changeant des choses que vous n'avez jamais voulu changer.

Lire http://yosefk.com/c++fqa/defective.html#defective-8 pour une brève discussion des difficultés auxquelles est confronté tout code de refactoring en C++.

Microsoft a manifestement décidé d'abandonner cette fonctionnalité particulière pour C++, laissant aux développeurs tiers le soin de faire ce qu'ils peuvent.

8 votes

Non, c'est un mauvais lien en effet. Le gars est frustré, et même pas poli (j'ai contacté le gars une fois, à propos de certains points clairement abusifs, il s'en fichait). Mais oui, le refactoring est clairement difficile (en fonction de la taille du code), et il faut réfléchir à deux fois à la conception initiale.

16 votes

Nous sommes donc en train d'affirmer que Microsoft n'est pas capable de résoudre incroyablement difficile alors que la Fondation Eclipse est meilleure ? Je programme dans VS pour les contraintes du projet, mais quand je dois renommer une variale, je lance Eclipse juste pour ça...

0 votes

ReSharper est en route, mais il n'est pas encore tout à fait là :) resharper-support.jetbrains.com/entries/

11voto

Brian Points 2013

Je ne suis pas sûr de la raison pour laquelle il en est ainsi, mais il existe des outils tiers qui aident. Par exemple, je suis actuellement en train d'évaluer Assistance visuelle X (par Whole Tomato). Nous utilisons également Visual Studio 2005.

0 votes

Visual Assist X est assez bon et fait généralement très bien le travail. Cependant, si vous vous lancez dans la métaprogrammation de modèles, il peut s'attaquer à une partie de votre code.

2 votes

C'est vrai. J'ai remarqué qu'il ne gère pas très bien plus de quelques couches de modèles (comme lorsqu'on travaille avec Boost).

5voto

mem64k Points 445

devexpress fournit un add-in Refactor ! pour C++ pour VS2005 et VS2008.

0 votes

Cependant, il ne prend plus en charge VS2005.

4voto

Binary Worrier Points 27424

Ne vous sentez pas lésé, il n'est pas non plus disponible en VB.Net :)

Le C++ est un langage difficile à analyser par rapport au C# (VB aussi, à moins que vous n'ayez activé "Option Explicit" et "Option Strict", il est difficile de dire exactement ce que fait une ligne de code dans un contexte BEAUCOUP plus large).

À mon avis, cela pourrait avoir un rapport avec la "difficulté" de la fournir.

P.S. J'ai marqué ma réponse comme wiki communautaire parce que je sais qu'elle n'apporte aucune information utile.

1voto

Liviu Points 158

J'ai utilisé Assistance visuelle X avec Visual Studio depuis environ un an et demi. C'est un outil incroyable qui vous aide beaucoup avec le code C++ ordinaire, mais il n'est pas très performant sur le code modélisé. Par exemple, si vous avez un modèle sophistiqué basé sur des politiques, il ne saura pas comment renommer vos variables, et le projet ne compilera plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X