Frage

Ich bin etwas C ++ Code von Strukturen Klassen migrieren.

Ich war mit Strukturen vor allem für die Bit-Feld Optimierungen, die ich nicht mehr brauche (ich bin mehr besorgt über die Geschwindigkeit als platzsparendes jetzt).

  • Was ist die allgemeinen Leitlinien für die tun, diese Migration sind? Ich bin immer noch in der Planungsphase, da dies ein sehr großer Schritt ist ein wichtigen Teil des Codes zu beeinflussen. Ich will alles planen, bevor es zu tun. Was sind alle wesentlichen Dinge, die ich im Auge behalten sollte?
War es hilfreich?

Lösung

Ich kann nicht nennen alle die wesentlichen Dinge, aber ich kann man nennen:. Kapselung

Der einzige technische Unterschied in C ++ zwischen Struktur und Klasse ist der Standardzugang. In einer Struktur, alles ist standardmäßig öffentlich; in einer Klasse ist, alles privat. Ich gehe davon aus, dass du redest POD Structs hier, wo alles öffentlich ist.

Was ich tun würde, ist dies:

  1. Ändern der struct Schlüsselwort class und sehen, wo Code Pausen aufrufen. Das würden Sie einen Anhaltspunkt über, welche Teile des Typs verwendet werden, wo.
  2. Daraus bestimmen, welche Elemente des Typs öffentlich sein sollen, die privat sein sollte.
  3. Schreiben Accessorfunktionen für die öffentlichen Teile und ändern Code aufrufen, sie zu nutzen.
  4. Bewegen Sie den Code, der den Zugang zu privaten Teile in die Klasse selbst muss.

Andere Tipps

Wenn ein Vermächtnis Codebasis von C zu C ++ zu aktualisieren, meine Erfahrung ist es sehr wenig Wert ist und zu viel Aufwand vollständig beteiligt tatsächlich Ihre Anwendung zu konvertieren Strukturen zu herkömmlichen C ++ Objekte rearchitecting. Da machen Sie keinen Fehler, das ist ist, was Sie am Ende tut. Es wird nicht auf den ersten Blick, aber schließlich werden Sie erkennen Sie die Anwendung sind neu zu gestalten.

Sie sagen nicht genug zu wissen, was Ihre Ziele sind, so vielleicht ist es Ihr Ziel, aber wenn Sie nur zu konvertieren C versuchen ++ so neuen Code in der App C sein kann ++, nur die Dateien umbenennen, ein Bündel von Abgüssen in denen implizite Konvertierungen von void * vor auftretendem wurden, und mit Ihrem Leben weitergehen.

Es gibt keinen sinnvollen Unterschied zwischen den Strukturen und Klassen in C ++ (sie unterscheiden sich nur durch Standardsichtbarkeit). Ich würde nicht die Mühe, um die Strukturen zu Klassen migrieren, wenn Sie als auch sinnvolle Verhaltensweisen hinzufügen wollen.

Erste , werde ich die andere kommen und sagen, dass möglicherweise nicht der beste Zug der gesamten Code von Strukturen Klassen bewegen. Wenn Sie waren es gut machen (das heißt, mehr als nur die Änderung struct X { mit class X { public:), dass Mittel Neugestaltung der Anwendung (mehr oder weniger eine komplette Neufassung).

Dies beinhaltet neuen Bugs, neue Entwicklungszyklen, zusätzliche Tests Einführung, Dokumentation ändern und so weiter.

Zweite , wenn man bedenkt Sie gute Gründe haben, dies zu tun (für mich „just for fun“ und „zu sehen, ob ich es kann“ kann in manchen Situationen gute Gründe sein: D) hier meine Antworten auf Ihre Fragen sind:

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

Richtlinien und Dinge im Auge zu behalten:

  • Arbeit in sehr kleinen Iterationen , und stellen Sie sicher, dass die Anwendung ist funktionell zwischen Iterationen. Wenn Sie Unit-Tests definiert haben, können Sie Ihren Weg durch sie arbeiten (eine Einheit auswählen, Redesign nach einer Reihe von Schritten (siehe unten), dann anzupassen und die Tests durchführen.

  • einen Bereich Ihres Codes auswählen und beendet es .

  • Sie die folgenden Schritte für jede Änderung folgen:

    • analysieren Funktionalität und Redesign
    • Erstellen Sie die neue Implementierung parallel mit dem alten
    • Schalter in der neuen Implementierung überall die alte verwendet wird
    • Test, dass die Anwendung funktioniert immer noch
    • entfernen Sie den alten Code
    • Test, dass die Anwendung funktioniert immer noch
  • Wenn Sie nicht es im Moment tun, startet eine Verzweigungsquelle-Steuersoftware mit . Nichts weniger ganz schneidet es. Ich empfehle Mercurial, aber ich verstehe GIT hat etwa die gleichen Funktionen. Sie können mir später danken: o.)

  • Führen Änderungen transaktions (mit einem Bereich starten und beenden, ohne Änderungen aus anderen Bereichen hinzugefügt, während die Änderungen für die ersten bis auf halben Weg sind). Wenn Sie eine Verzweigung Quelle-Steuerung und mehr Entwickler verwenden, können Sie eine Änderung / Fläche pro Entwickler zu einer Zeit haben, dann die Änderungen zentralisieren.

Die Vorteile einer Refactoring Methodik:

  • Die Anwendung bleibt funktionsfähig, wenn Sie durch die auf halbem Weg entscheiden, dass sich der Aufwand lohnt sich nicht (oder wenn das Management den Aufwand entscheidet ist es nicht wert)

  • die Stabilität der Anwendung bleibt überschaubar durch die Änderungen

Wenn Sie einige Meilensteine ??schaffen sollte dies recht überschaubar sein.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top