簡體   English   中英

包裝設計模式

[英]Wrapper design pattern

說我有一堂課:

class B;
class A{
public:
    A();
    virtual B foo();
}

在第3方組件中定義。 我想包裝類A和B,得到myA和myB。 現在,我不應該從外部訪問A類和B類,而對myA和myB具有相同的功能。 foo()可以從第3方模塊中調用。

我更喜歡使用繼承而不是封裝。

所以有兩個問題:

  1. 如果a的類型為myA,則調用a-> myFoo()(由於具有相同的簽名和不同的返回類型而需要重命名方法)應調用A :: foo()。
  2. 如果a類型為myA2 :: myA,則調用a-> myFoo()應該調用myA2 :: myFoo()。

關於如何做到這一點的任何建議? 我想出了一些解決方案,但我希望從整體上獲得新的看法。

編輯:

只是一個理論問題。 我實際上不需要這樣做,只是思考可以實現的方式。

編輯2:

myA2是擴展myA的類。 在該模式之前,它會被稱為A2(從第3方模塊擴展了A類的類)。

我不明白為什么您更喜歡繼承而不是封裝。 一般來說,擴展您要包裝的類是實現包裝器模式的“錯誤”方法,尤其是因為您通常希望在過程中重新定義接口。 在myA類中,您將具有A類型的字段,其中包含A類的實例,myA中的方法可以根據需要調用。 除非我誤解了您想要完成的工作,否則這是完成您想要的工作的最優雅的方式。

您應該能夠類似地聲明函數名稱/參數。 檢出: 奇怪的繼承節:[23.9]這是什么意思,警告: Derived::f(char)隱藏Base::f(double) 在第三個代碼塊上

它還顯示了調用基本方法的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM