2013-06-25 14 views
1

當前模板函數位於.cpp文件中,但是這些模板需要在標題中定義。但是,當我將它們移動到標題中時,模板無法訪問.cpp文件中的靜態方法。我需要做些什麼改變?如何在test.h中創建模板函數在test.cpp中使用靜態方法

這只是一個實用程序頭和cpp,與類無關。

+0

「......這些模板需要在標題中定義。」爲什麼? –

+0

「靜態方法」是什麼意思? –

+0

他們需要在標題中定義,因爲我們遵守MISRA規則。靜態方法在靜態void method_name(){}不在一個類中,並且只能被該文件使用 – user2089851

回答

0

您應該在標題中定義靜態方法。

模板類必須完全在頭文件中定義,因爲編譯器基本上爲每個模板實例化創建了一個新類,所以它必須在編譯時訪問完整的方法實現。

+0

然後,包含該頭文件的每個文件是否也包含該靜態方法的定義? – user2089851

+0

只有在宣佈公開的情況下才有效。 –

+0

該方法僅由模板化函數使用。標題和cpp與類無關。沒有公共或私人的... – user2089851

2

我會繼續前進,並在頭文件中放入所有必需函數的聲明(並從其定義中刪除static)。如果你把它們放在namespace FunctionName_impl_detail或類似的東西里,你可以避免名稱衝突。如果您在聲明附近放置註釋令人不鼓勵直接使用它們,那麼您可能不需要「隱藏」或「保護」它們。但是如果你想要防止其他代碼使用它們,你可以讓它們成爲friend的模板函數的某些類的成員private,static

相關問題