簡體   English   中英

C ++新秀:如何在幫助程序/輔助文件中存儲類的代碼,但仍可以訪問所有類成員函數?

[英]C++ rookie: how can I store code for a class in helper/auxiliary files, but still access all class member functions?

我編寫了一個類,該類從外部文件中讀取數據,處理數據,然后進行計算。

該類非常長,尤其是構造函數。 在這里,我從外部文件中讀取數據並進行操作以准備計算。 我使用模板函數來做到這一點。

我知道將類拆分為更好的樣式,但是我將其與無法更改的商業代碼結合使用。 另外,需要使用代碼的人需要將其作為一類+輔助文件,因此我僅限於這一類。 為了使代碼更具可讀性,我想將構造函數中的一些代碼存儲在名為“ auxiliary.h / .cpp”的幫助器.cpp / .h文件中,並通過函數進行訪問。

這是問題所在:

1)將模板函數(類的成員函數)作為函數參數傳遞給輔助文件。 我無法做到這一點,盡管我聽說有可能通過“消除歧義”來實現。 傳遞非模板函數和向量以及類似的東西是沒有問題的。模板函數就是問題。

2)同樣,即使我可以將模板函數作為參數傳遞給訪問輔助文件的函數,我的參數列表最終也會很長。

我想知道的是,有什么方法可以使輔助文件“看到”該類嗎? 我嘗試將類的實例作為參數/參數傳遞給在輔助文件中填充的每個函數。 但這會導致“ instanceName未在此范圍內聲明”,並且看起來確實是一種循環/復雜的方法。

任何建議將不勝感激。 謝謝。

我知道將類拆分為更好的樣式,但是我將其與無法更改的商業代碼結合使用...

對於您的具體情況,我可能會缺少更多的背景知識,但是無論您使用的是什么第三方代碼,您都應該能夠對自己編寫的代碼做任何想做的事情,聽起來好像寫了很多東西。

您認識到您的課程太大了,因此下一步是將其分解為獨立的,更具凝聚力的課程。 嘗試創建其他文件/函數來簡單地修改已經很大的一個類的內部狀態,將使代碼變得更大,並且比起現在,您將更多地意粉。

如果第三方庫需要使用您編寫的單個類進行操作,請查看Facade設計模式。 您可以輕松地將“看起來”復雜的類放到外部,但是在內部它僅將工作委派給任何數量更多的專門類。

如果您希望一個類可以訪問第三方庫,也可以這樣做。 看一下諸如Adapter設計模式之類的東西。

我可以提供的另一條建議是拿起有關重構的書 它將向您展示如何處理看起來過於復雜的任何代碼,並有條不紊地應用步驟以使其更具可讀性和可維護性。 例如,看一下您的數據成員,它們中的任何一個看起來像它們屬於一個組(即,它們經常一起訪問/修改)嗎? 如果是,請考慮將它們移入自己的類,該類提供了最小的接口,用於僅獲取/設置主類所需的內容。

這篇文章並沒有回答您的特定問題,而是退后一步,也許有比打破OO規則和良好的設計原則更好的解決方案,只是因為某些約束可能並沒有真正存在。

您可能可以制作一個模板幫助程序類而不是幫助程序函數,將指針傳遞給您的第一個(最重要的)類?

暫無
暫無

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

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