2011-10-15 39 views
0

我寫過一個類,它從外部文件中讀取數據,處理數據,然後進行計算。C++菜鳥:如何在助手/輔助文件中存儲類的代碼,但仍可訪問所有類成員函數?

該類很長,特別是構造函數。這是我從外部文件中讀取數據並操作它以準備計算的地方。我使用模板功能來做到這一點。

我知道將課程分成更好的樣式,但是我將它與商業代碼結合使用,我無法改變。另外,需要使用代碼的人需要它是一個類+輔助文件,所以我被限制在這個類中。爲了使代碼更具可讀性,我想將一些來自構造函數的代碼存儲在名爲「auxiliary.h/.cpp」的助手.cpp/.h文件中,並通過函數訪問它。

這裏的問題:將所述模板傳遞函數(的類的成員函數)作爲函數參數的輔助文件

1)。我不能這樣做,儘管我聽說有可能通過一種叫做「消除歧義」的措施。傳遞非模板函數和向量以及類似的東西是沒有問題的......模板函數是問題。 2)另外,即使我可以將模板函數作爲參數傳遞給訪問輔助文件的函數,我的參數列表最終會變得非常長。

我想知道的是,有什麼方法可以使輔助文件「看」類?我試着將每個函數的INSTANCE作爲參數/參數傳遞給輔助文件中的所有東西。但是這會導致「instanceName未在此範圍內聲明」,並且看起來像是一個相當圓形/複雜的方法。

任何意見將不勝感激。謝謝。

回答

0

你可以做一個模板助手類而不是輔助函數,將一個指針傳遞給你的第一個(最大的)類?

+0

謝謝Kernald。我還沒有聽說過模板助手類,但我會研究這個。 – user616199

4

我知道,這將是更好的風格分裂類,但我在商業代碼,我不能改變組合使用它......

我可能會丟失更多背景到你的具體情況,但無論你使用的是什麼第三方代碼,你應該能夠對你寫的代碼做任何你想做的事情,這聽起來像你寫了很多。

你認識到你的班級太大了,所以下一步就是把它分成獨立的,更有凝聚力的班級。試圖創建其他文件/函數,只是簡單地修改一個已經很大的類的內部狀態,會使代碼變得更大,並且你的意大利麪會比現在更加細膩。

如果第三方庫需要使用您編寫的單個類進行操作,請查看Facade設計模式。你可以很容易地在外面看到「看起來像」一個複雜的類,但是在內部它只是簡單地將任何數量的更專門化的類委託給它。

如果你想要一個類訪問第三方庫,你也可以這樣做。看看適配器設計模式等內容。

我可以提供的另一個建議是拿起this book on refactoring。它會告訴你如何採取任何看起來太複雜的代碼,並有條不紊地應用步驟使其更具可讀性和可維護性。例如,看看你的數據成員,看看他們是否屬於一個組(即他們經常一起訪問/修改)?如果是的話,可以考慮將他們轉移到他們自己的班級中,只提供最少的界面來獲取/設置您的主班級需要的東西。

這個職位不回答您的具體問題,而是後退一步,也許還有比打破OO規則和良好的設計原則,因爲只是一些約束條件可能不是真的有一個更好的解決方案。

+0

謝謝DXM。我非常感謝你關於Facade的信息(沒有聽說過)和書籍參考。我一定會看看這一切。我聽到你的聲音,但這個課程將被其他需要使用這些輔助文件的單獨課程的人使用!另外(這可能是我的失敗),我很難考慮如何將這個東西分成單獨的類,因爲計算是非常專業化的。 – user616199