2014-01-30 69 views
0

我有一組對象,所有不同類型的,可以說在不同的非相關對象上調用相同的函數?

CTree^ oTree; 
CCar^ oCar; 
CHouse^ oHouse; 

這些對象的所有類具有相同的功能

static EnumResult SetValueDebug (EnumPID i_enPID, Object^ i_Object); 

其中EnumResult和EnumPID(「參數ID」)在每個班級中定義。

我的想法是創造這樣

Object^ oResult; 
array<Object^>^ ao = gcnew array<Object^>{oTree, oCar, oHouse}; 
for (int iCnt = 0; iCnt < ao->Length; iCnt++) 
    oResult = ao[iCnt]->SetValueDebug (ao[iCnt]->EnumPID::Param1, DefaultValue); 
    // call it on the real object although it's a static function, because there is 
    // no dynamic_cast<ao[iCnt]->GetType>(ao[iCnt]) ::SetValueDebug (... 

,但我不知道怎麼辦。

我想用繼承:

ref class CSuperior 
{ 
public: 
    enum class EnumResult { ... }; 
    enum class EnumPID { ... }; 
    static EnumResult SetValueDebug (EnumPID i_enPID, Object^ i_Object) 
    { 
    m_aoValue[(int)i_enPID] = i_Object 
    }; 
protected: 
    array<Object^>^ m_aObject; 
    ... 
} 

其中m_aObject可以從繼承類訪問。這會工作嗎?

但繼承可能失敗,因爲我已經從其他人繼承了一些類。
使用接口也失敗了,afaik。

有沒有機會實現上述類似的東西?

+0

如果對象是不相關的,但你肯定知道他們有具體的方法,你可以使用反射調用它,用字符串的方法名 –

+0

謝謝,我會牢記以備將來使用。我現在再次考慮使用繼承,因爲我發現上級會在我的應用程序中產生其他積極影響。每個類現在都會繼承上一個類,而其他已經繼承的類將通過它們的基類繼承上級類。所以一切都應該沒問題。 –

回答

1

接口爲什麼會失敗?

enum class EnumResult { ... }; 
enum class EnumPID { ... }; 

ref interface ISuperior 
{ 
public: 
    EnumResult SetValueDebug (EnumPID i_enPID, Object^ i_Object); 
} 

然後每一類可以實現此接口...

+0

到目前爲止,EnumResult和EnumClass是每個ref類的一部分。每個類都有不同的函數結果和參數ID,所以我不想讓這些枚舉「全局」。 –

+0

如果沒有共同的SENCE,你幾乎沒有辦法......當然,你也可以有「結果」和枚舉一個INTFACE ......這使得它更復雜.... –

相關問題