2013-10-18 70 views
0

我有一個包含許多函數和變量的大命名空間。 現在我想將它們分成不同的文件以便於維護。如何將C++命名空間分解爲多個文件

只有一個問題是,一個文件可能需要來自其他文件的功能/變量,反之亦然,即需要包括B和B需要包括A ..它不起作用,因爲每個文件只能是包括一次。

我不確定這是否該做的方法,任何想法?

+2

使用[forward declaration pattern](http://en.wikipedia.org/wiki/Forward_declaration) – Andrey

回答

1

將您的函數原型放入頭文件(.h)中。將你的功能實現放入源文件(.cpp)。

這樣,你就可以通過包括B.hA.cpp通過在B.cppA.h使用,在B.cppA.cpp實現的功能。例如在A.cppB.cpp實現同時使用的功能。

UPDATE

安德烈在評論指出,這是所謂的 「提前聲明」。

+0

謝謝,但我的都是模板函數和類,所以我寧願只要將它們保存在頭文件中即可。前向聲明只適用於struct/class,因爲變量會拋出「redefinition」 – w00d

+0

在這種情況下,我建議你將常用的模板函數放入共享頭文件中(比如'Common.h'),並且包含它分爲'Ah'和'Bh'。由於模板在C++中的工作方式,您無法在模板函數之間進行循環引用。 –

+0

您也可以轉發模板。我通常在* .tcc文件中移動模板實現,所以頭只包含聲明。 – Johny

0

這可能是一個具有挑戰性的問題,具體取決於您的代碼。 你需要分析所有的依賴關係,看看你是否能想出一種直觀的方式來分割你的代碼。

已經提到的前置聲明可以提供幫助。 它也可以幫助使用接口。在接口上可以找到很多,for instance here on stackoverflow