明確初始化
您可以使用明確具現化,建立樣板化類別或函式的具現化,而在程式碼中實際使用它。 因為當您建立使用範本進行散發的程式庫 ( .lib
) 檔案時,不會將未經驗證的範本定義放入物件 ( .obj
) 檔案中,所以會很有用。
範例
此程式碼會明確具現化 MyStack
int
變數和六個專案:
template class MyStack<int, 6>;
這個陳述式建立 MyStack
的具現化,沒有保留物件的任何儲存區。 程式碼為所有成員產生。
下一行只明確具現化建構函式成員函式:
template MyStack<int, 6>::MyStack( void );
您可以使用特定的類型引數來重新宣告函式範本,以明確具現化函式範本,如函式範本具現化 中的 範例所示。
您可以使用 extern
關鍵字來防止成員的自動具現化。 例如:
extern template class MyStack<int, 6>;
同樣地,您可以將特定成員標記為外部和未具現化:
extern template MyStack<int, 6>::MyStack( void );
您可以使用 extern
關鍵字,讓編譯器在多個物件模組中產生相同的具現化程式碼。 如果呼叫函式,您必須在至少一個連結的模組中使用指定的明確範本參數來具現化函式範本。 否則,建置程式時,您會收到連結器錯誤。
注意
extern
特製化的 關鍵字只適用于類別主體外部定義的成員函式。 類別宣告內定義的函式被視為內嵌函式,永遠會具現化。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應