簡體   English   中英

將C ++代碼從結構遷移到類

[英]migrating C++ code from structures to classes

我正在將一些C ++代碼從結構遷移到類。

我使用的結構主要用於比特場優化,我不再需要(我現在更擔心速度而不是節省空間)。

  • 執行此遷移的一般准則是什么? 我仍處於計划階段,因為這是影響代碼主要部分的一個非常大的舉動。 我想在做之前先計划好一切。 我應該記住的所有重要事項是什么?

我不能說出所有基本的東西,但我可以說出一個: 封裝

結構和類之間C ++的唯一技術差異是默認訪問。 在結構中,默認情況下一切都是公共的; 在課堂上,一切都是私密的。 我假設你在這里談論POD結構,一切都是公開的。

我會做的是:

  1. struct關鍵字更改為class並查看調用代碼中斷的位置。 這將為您提供關於該類型的哪些部分使用的線索。
  2. 從那里,確定哪種類型的元素應該是公開的,哪些應該是私有的。
  3. 為公共部分編寫訪問器函數,並更改調用代碼以使用它們。
  4. 將需要訪問私有部分的代碼移動到類本身中。

在將遺留代碼庫從C更新到C ++時,我的經驗是,實際重新架構應用程序以將結構轉換為傳統的C ++對象時,實際上沒有太大的價值和太多的努力。 因為毫無疑問,這就是你最終會做的事情。 起初它似乎不會,但最終你會意識到你正在重新設計應用程序。

你沒有說明你的目標是什么,所以也許這是你的目標,但如果你只是想轉換為C ++,那么你的app中的新代碼可以是C ++,只需重命名文件,添加一堆強制轉換來自void *的隱式轉換發生在之前,並繼續你的生活。

C ++中的結構和類之間沒有任何有意義的區別(它們僅在默認可見性方面不同)。 我不打算將結構遷移到類,除非你要添加有意義的行為。

首先 ,我將加入其他人並說將所有代碼從結構轉移到類可能不是最好的舉措。 如果你做得好(也就是說,不僅僅是更改struct X { with class X { public: :),這意味着重新設計應用程序(或多或少是完全重寫)。

這涉及引入新的錯誤,新的開發周期,額外的測試,更改文檔等。

其次 ,考慮到你可能有正當理由這樣做(對我而言“只是為了好玩”和“看看我是否可以做到”在某些情況下可能是有效理由:D)以下是我對你問題的回答:

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

指南和要記住的事項:

  • 在非常小的迭代中工作 ,並確保應用程序在迭代之間起作用。 如果您定義了單元測試,您可以通過它們(選擇一個單元,按照一組步驟重新設計(見下文)),然后調整並運行測試。

  • 選擇代碼的一個區域並完成它

  • 嘗試對每個更改執行以下步驟:

    • 分析功能和重新設計
    • 與舊的實現並行創建新實現
    • 在新的實現中切換舊的實現
    • 測試應用程序是否仍然有效
    • 刪除舊代碼
    • 測試應用程序是否仍然有效
  • 如果您現在沒有這樣做,請開始使用分支源代碼控制軟件 沒有什么比這更能減少了。 我推薦Mercurial,但我理解GIT具有相同的功能。 你以后可以感謝我:o)。

  • 以事務方式執行更改 (從一個區域開始並完成更改,而不添加其他區域的更改,而第一個區域的更改是中途)。 如果您使用分支源代碼控制和多個開發人員,則每個開發人員可以同時擁有一個更改/區域,然后集中更改。

重構方法的優點:

  • 如果您決定中途付出的努力是不值得的(或者如果管理層認為努力不值得),那么該應用程序將保持正常運行

  • 應用程序的穩定性仍然可以通過更改來管理

如果你建立一些里程碑,這應該是非常易於管理的。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM