Question

J'émigre du code C ++ de structures aux classes.

J'utilisais principalement pour les structures d'optimisation de champ de bits que je ne pas besoin de plus (je suis plus inquiet de la vitesse que de sauver maintenant l'espace).

  • Quelles sont les lignes directrices générales pour faire cette migration? Je suis encore au stade de la planification que c'est un mouvement très important affectant une grande partie du code. Je veux tout planifier avant de le faire. Quelles sont toutes les choses essentielles que je dois garder à l'esprit?
Était-ce utile?

La solution

Je ne peux pas nommer tous les choses essentielles, mais je peux nommer un. encapsulation

La seule différence technique en C ++ entre struct et la classe est l'accès par défaut. Dans un struct, tout est public par défaut; dans une classe, tout est privé. Je suppose que vous parlez POD struct ici, où tout est public.

Ce que je voudrais faire est la suivante:

  1. Modifier le mot-clé struct à class et voir où appeler les pauses de code. Cela vous donne une idée de ce que sont utilisés parties du type où.
  2. A partir de cela, déterminer quels éléments du type devraient être rendus publics, ce qui devrait être privé.
  3. Fonctions accesseurs en écriture pour les parties publiques, et le changement d'appel du code pour les utiliser.
  4. Déplacer le code qui a besoin d'accéder à des parties privées dans la classe elle-même.

Autres conseils

Lors de la mise à jour d'une base de code hérité de C à C ++, mon expérience est il y a très peu de valeur et tout à fait trop d'effort impliqué dans rearchitecting effectivement votre application à des structures de convertir des objets C ++ traditionnels. Parce que vous y trompez pas, thats est ce que vous allez finir par faire. Il semblera pas au début, mais vous finirez par vous rendre compte vous redessiner l'application.

Vous ne dites pas assez sur ce que sont vos objectifs, c'est donc peut-être votre objectif, mais si vous essayez juste de convertir en C ++ si nouveau code dans votre application peut être C ++, simplement renommer les fichiers, ajoutez un tas de moulages où les conversions implicites de vide * sont survenus avant, et de passer avec votre vie.

Il n'y a pas de différence significative entre les structures et les classes en C ++ (ils ne diffèrent que par la visibilité par défaut). Je ne viendrais pas de migrer les structures des classes à moins que vous allez ajouter des comportements significatifs aussi bien.

Première , je vais rejoindre les autres et dire que le déplacement de tout le code des structures des classes ne peut pas être le meilleur coup. Si vous deviez le faire bien (ce qui est, plus qu'un simple changement struct X { avec class X { public:) que des moyens redessiner l'application (plus ou moins une réécriture complète).

Cela implique l'introduction de nouveaux bugs, de nouveaux cycles de développement, des tests supplémentaires, en changeant la documentation et ainsi de suite.

Deuxième , étant donné que vous pouvez avoir des raisons valables pour ce faire (pour moi « juste pour le plaisir » et « pour voir si je peux le faire » peut être des raisons valables dans certaines situations: D) ici mes réponses à vos questions:

1. What are the general guidelines for doing this migration?
2. What are all the essential things I should keep in mind?

Lignes directrices et les choses à garder à l'esprit:

  • travail itérations très petites , et assurez-vous que l'application est fonctionnelle entre les itérations. Si vous avez des tests unitaires définis, vous pouvez travailler votre chemin à travers eux (choisir une unité, redessiner la suite d'une série d'étapes (voir ci-dessous), puis adapter et exécuter les tests.

  • choisir une zone de votre code et la terminer .

  • essayer de suivre ces étapes pour chaque changement:

    • analyser la fonctionnalité et la refonte
    • créer la nouvelle mise en œuvre en parallèle avec l'ancien
    • interrupteur dans la nouvelle mise en œuvre partout l'ancien est utilisé
    • Test que l'application fonctionne toujours
    • supprimer l'ancien code
    • Test que l'application fonctionne toujours
  • Si vous ne le faites pas pour le moment, commencer à utiliser un logiciel source de contrôle de branchement . Rien de moins réduit tout à fait. Je recommande Mercurial, mais je comprends GIT a peu près les mêmes caractéristiques. Vous pouvez me remercier plus tard. O)

  • Effectuer des changements transactionnellement (en commençant par une zone et la terminer, sans ajouter de changements par rapport à d'autres domaines, tandis que les modifications pour le premier sont à mi-chemin à travers). Si vous utilisez une source de contrôle de branchement et plusieurs développeurs vous pouvez avoir un changement / zone par développeur à un moment, puis les changements centraliser.

Les avantages d'une méthodologie de refactoring:

  • les séjours d'application fonctionnelle si vous décidez à mi-chemin à travers que l'effort ne vaut pas (ou si la direction décide de l'effort est pas la peine)

  • la stabilité de l'application reste gérable par les changements

Si vous établissez des jalons cela devrait être tout à fait gérable.

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top