當前模板函數位於.cpp文件中,但是這些模板需要在標題中定義。但是,當我將它們移動到標題中時,模板無法訪問.cpp文件中的靜態方法。我需要做些什麼改變?如何在test.h中創建模板函數在test.cpp中使用靜態方法
這只是一個實用程序頭和cpp,與類無關。
當前模板函數位於.cpp文件中,但是這些模板需要在標題中定義。但是,當我將它們移動到標題中時,模板無法訪問.cpp文件中的靜態方法。我需要做些什麼改變?如何在test.h中創建模板函數在test.cpp中使用靜態方法
這只是一個實用程序頭和cpp,與類無關。
您應該在標題中定義靜態方法。
模板類必須完全在頭文件中定義,因爲編譯器基本上爲每個模板實例化創建了一個新類,所以它必須在編譯時訪問完整的方法實現。
然後,包含該頭文件的每個文件是否也包含該靜態方法的定義? – user2089851
只有在宣佈公開的情況下才有效。 –
該方法僅由模板化函數使用。標題和cpp與類無關。沒有公共或私人的... – user2089851
我會繼續前進,並在頭文件中放入所有必需函數的聲明(並從其定義中刪除static
)。如果你把它們放在namespace FunctionName_impl_detail
或類似的東西里,你可以避免名稱衝突。如果您在聲明附近放置註釋令人不鼓勵直接使用它們,那麼您可能不需要「隱藏」或「保護」它們。但是如果你想要防止其他代碼使用它們,你可以讓它們成爲friend
的模板函數的某些類的成員private
,static
。
「......這些模板需要在標題中定義。」爲什麼? –
「靜態方法」是什麼意思? –
他們需要在標題中定義,因爲我們遵守MISRA規則。靜態方法在靜態void method_name(){}不在一個類中,並且只能被該文件使用 – user2089851