首頁 >後端開發 >C++ >C 中的巢狀類別可以向前宣告以在其封閉類別之外使用嗎?

C 中的巢狀類別可以向前宣告以在其封閉類別之外使用嗎?

Barbara Streisand
Barbara Streisand原創
2024-12-01 15:57:10629瀏覽

Can Nested Classes in C   Be Forward Declared for Use Outside Their Enclosing Class?

巢狀類別前向聲明:一項不可能的任務

在C 中,內部類別是組織程式碼的便捷方式。但是,當嘗試在封閉類別定義之外透過引用傳遞內部類別物件時,可能會出現編譯錯誤。這是因為編譯器要求在呼叫函數中使用內部類別之前先完全定義或聲明內部類別。

考慮以下程式碼:

class Container {
public:
    class Iterator {
        ...
    };

    ...
};

如果您希望傳遞迭代器在Container 類別範圍之外的函數中透過引用引用對象,您可以直觀地嘗試轉發聲明Iterator 類別:

class Container::Iterator;

class Foo {
    void Read(Container::Iterator& it);
};

但是,由於未知類型迭代器,此方法失敗並出現編譯錯誤。

前向聲明限制

在 C 中,前向聲明只能用於聲明類別本身,而不是它們的嵌套成員。此限制會阻止內部類別的前向聲明。

解決方案

要解決此問題,請考慮替代策略:

  • 使類非嵌套: 將Iterator 類別移到Container類別之外,以便可以前向聲明
  • 重新排序類別聲明: 在 Foo 類別的函數簽名中使用 Iterator 類別之前完整定義它。
  • 使用公用基底類別: 建立一個單獨的基底類,Iterator 類別和 Foo 類別中的函數都可以繼承該基底類別。這允許您轉發聲明公共基類別並透過參考傳遞從其派生的物件。

以上是C 中的巢狀類別可以向前宣告以在其封閉類別之外使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn