在C++中模擬JAVA內部類的方法
阿新 • • 發佈:2022-05-02
有時候我們需要把一批互相關聯的API用不同的類提供給使用者,以便簡化每個類的使用難度。但是這樣這些類之間的資料共享就成了問題。JAVA的內部類可以自由的訪問外圍類的所有資料,所以很時候做這的工作,而如果C++也這樣做,就變成要增加很多setter和getter。但是,也可以用以下方法模擬實現:
首先,你的內部類標頭檔案一般是被外圍類所#include的,所以需要在內部類的宣告前增加“前置宣告”:
namespace outerspace{
class OuterClass;
}
然後,再設定一個指向外部類的指標:
private:
OuterClass* outer_obj;
最後,讓外部類是內部類的友元:
friend outerspace::OuterClass;
以上是內部類的設定,外部類就很簡單,只需要儲存內部類的指標,然後設定好內部類為友元就可以了:
friend InnerClass;
private:
InnerClass inner_obj;
外部類則需要在初始化過程中設定ineer_obj的outer_obj值:
inner_obj->outer_obj = this;
在設計API的過程中,內部類需要用到外部類任何成員,包括是private的,都可以用 outer_obj->XXX直接引用。而外部類則可以直接返回內部類的指標(引用)給使用者。
==歡迎關注本公眾號,專注遊戲伺服器端開發技術==