template <typename T>
Singleton<T>::Worker Singleton<T>::worker; // 錯誤:Worker 為依賴名稱
warning C4346: 'Singleton::Worker': 依賴名稱不是類型
error C2143: 缺少 ';'
error C4430: 缺少類型說明符
template <typename T>
typename Singleton<T>::Worker Singleton<T>::worker; // 正確
Singleton<T>::Worker 依賴模板參數 T,屬於依賴名稱。typename 明確告訴編譯器「這是一個類型」。template <typename T>
class Singleton {
// ... 略 ...
static Worker worker; // 宣告
};
// 定義靜態成員
template <typename T>
T* Singleton<T>::m_pInstance = nullptr;
template <typename T>
typename Singleton<T>::Worker Singleton<T>::worker; // 關鍵修正
typename Base<T>::Typetemplate <typename T, typename = typename T::value_type>模板中定義靜態內部類成員時,必須在類型名前加 typename 解決依賴名稱歧義。此為 C++ 模板元程式設計核心規則之一。