2010-11-18 31 views
5

我將創建現有的自動化C++重構工具的比較表,並探索創建這種免費和開放源代碼工具的能力。您在實踐中使用了哪些C++重構?

我的問題是:你真正在日常工作中使用什麼樣的重構?有很明顯的事情,比如重命名變量/類/方法,但是有沒有特定於C++的東西,比如處理模板,STL,拷貝構造函數,初始化器等等?

我對構建C++開發人員在編碼中每天面臨的所有小問題的現實感興趣,並且至少在理論上可以自動化。我正在和我的同事們交談,但這可能是不夠的。

在此先感謝。

+3

祝你好運,創造一個體面的C++分析器,使這樣一個工具的工作。 – 2010-11-18 11:20:48

+0

當我用C++開發時,我沒有使用IDE的很多重構支持。根本沒有我發現真正有用的東西。我的建議是學習你的設計模式,閱讀Meyer的Effective C++,然後閱讀101編碼標準。學會從一開始就或多或少地做到這一點。 – 2010-11-18 11:28:08

+0

@Daniel:無論程序如何,重構都是開發人員的主要工具。按照KISS的原則,你不會爲了它而潛入模式中,而只是因爲你現在需要的東西而零碎地使用它們......因爲你不是神諭者。 – 2010-11-18 13:15:39

回答

1

正如你說有明顯的事情:

  • 重命名是一個
  • 改變函數簽名是另一個(尤其是功能幾乎是必然重複:申報的標頭和實現源)
  • 重命名/移動文件(包括指令的更新)

需要注意的是,雖然這是基本的,它很少會處理好的。我的主要抱怨是評論一般不會更新(我不是在談論doxygen自動生成的無用的混亂)。因此,如果我在頭文件中描述該類的用法,或者在另一個源文件中使用該類的理由,則該評論現已過時,因爲通過重命名該類,現在沒有人會知道它指的是什麼...

然而有更有趣的情況:

  • 當改變函數簽名,你需要更新所有調用點,開發商將需要幫助本地化他們
  • 有了繼承,有能力採取行動所有類別的層次結構:更改函數簽名(再次)或添加/刪除虛擬覆蓋。
  • 使用模板:概念提案已被刪除,如果您可以合成傳遞類型(必需的方法/內部類型)的需求,以便在更改這些需求時(通過修改模板定義)將得到通知該模板正在使用並且不再符合它的類別列表(並且將被更新)。請注意,如果只是重命名類型/方法,則只要不會破壞其他任何內容,您可能需要自動傳播更改。

好運...

+0

只是重命名很難。想象一下,將我重命名爲J ...在我的聲明和我使用的範圍內有一個J(「shadowing」)。這包括具有多重繼承的介入範圍; J甚至可能不會在實際的介入範圍聲明中顯式出現。請享用。 – 2011-08-17 05:34:25

1

這是我昨天提出的C++設計模式:溝策略繼承有利於策略

+1

我第一次讀到,我提出了*溝渠繼承贊成**政治**。* – 2010-11-18 13:07:00

+0

沒有Alexandrescu在你之前想出它,或者你剛剛意識到政策有多好? – 2010-11-18 13:17:18

+2

策略使用繼承。 – StackedCrooked 2010-11-18 14:36:25

1

一個重構,我希望得到支持實際上是注入方法。或多或少與提取方法相反。

因爲也許我看到我可以重新排列所產生的代碼以獲得更好的清晰度或效果;但我不知道目前有這方面的工具支持。

2

從答案中可以清楚地看出,很少有C++程序員見過真正的重構工具。是的,它們對於您使用的IDE來說非常罕見且非常具體。這是不可避免的,否則沒有好辦法找出哪些源代碼文件將代碼貢獻給最終的可執行文件。預處理器使其更具挑戰性,您需要了解宏值。源代碼解析器是必需的,但還不夠。

VS的Visual Assist是我所知道的。

相關問題