2016-04-06 31 views
5

我有一個開始變大的C++項目。我面臨的情況是,我有很多具有循環依賴關係的類。假設我有類A,B,C,D。爲了解決這個問題,我創建circular_dep.hC++正在創建一個頭來解決循環依賴一個好主意?

名爲一個頭文件,該文件的內容將是對類指針:

class A; 
class B; 
class C; 
class D; 

這標題現在包含在我所有類的標題中。這樣,當我有循環依賴關係時,編譯器停止抱怨。每當我添加一個新類的項目,但是,我必須將它添加到circular_dep.h

我找不到任何更簡單的方式來做到這一點,所以對我來說這是最好的解決方案遠。我的問題是:適用於可能面臨循環依賴問題的項目是一個好主意嗎?或者這是一個糟糕的設計/不好或危險的做法?

+0

循環引用最好避免一起。你最好問問如何重新構建你的代碼,以便你首先不需要它們。還要注意,你顯示的頭文件不包含*指針*,但是(前向)*聲明*的類。 – 5gon12eder

+3

我的首選是在標題中只需要單個類的前向引用。但這只是一種偏好。不把所有內容放在一個頭文件中的一個原因是爲了防止在添加類時必須重新編譯所有內容。 –

+0

在我的腦海中,有些情況可能是不可避免的。例如,我正在編寫一個類似於C的簡單語言的編譯器。函數有一個塊('{'和'}'之間的任何內容)。一個塊有變量聲明和命令(如'if'),一個命令可能有一個塊('if'可能有一個塊)。因此,我們在Command和Block – Aleksandrus

回答

2

你有什麼好。我通常看到的命名後綴是_fwd.h/_fwd.hpp/_fwd.hxx或您喜歡的.h的任何變體。您可以在Boost中看到這一點,例如:optional_fwd.hpp

(當然,減少循環依賴是一個很好的目標,但有些東西是互相遞歸的性質,像語法,所以你別無選擇。)