首頁 > 後端開發 > C++ > 如何在 C 中存取派生類別模板中的基底類別 Typedef?

如何在 C 中存取派生類別模板中的基底類別 Typedef?

Mary-Kate Olsen
發布: 2024-12-19 12:52:09
原創
930 人瀏覽過

How Can I Access Base Class Typedefs in Derived Class Templates in C  ?

衍生類別的範本類型定義

在 C 中,範本允許定義泛型類別和資料結構。但是,將 typedef 從基底類別傳播到衍生類別需要特定的處理。

考慮以下程式碼:

template<typename T>
class A {
public:
    typedef std::vector<T> Vec_t;
};

template<typename T>
class B : public A<T> {
private:
    Vec_t v; // Error: Vec_t is not recognized
};
登入後複製

在此範例中,類別 A 為 T 類型的向量定義了 typedef。 ,當嘗試在衍生類別 B 中使用此 typedef 時,會發生錯誤,因為 B 的作用域內無法辨識 Vec_t。

原因這個問題源自於 C 標準對模板基底類別範圍的處理。根據標準第14.6.2/3 節:

「在類別範本或類別範本成員的定義中,如果類別範本的基類依賴於範本參數,則在非限定名稱查找期間不會檢查基類別作用域...”

這表示在使用非限定名稱時,基底類別中定義的typedef 不會自動在衍生類別的作用域中可用。要解決此問題,typedef 必須是完全限定的:

typename A<T>::Vec_t v;
登入後複製

透過使用 typename 關鍵字後跟 typedef 的完全限定名稱,您可以明確指定要使用基底類別中的 typedef 。這將按預期工作,並允許您存取派生類別中的向量 typedef。

以上是如何在 C 中存取派生類別模板中的基底類別 Typedef?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板