我有一組對象,所有不同類型的,可以說在不同的非相關對象上調用相同的函數?
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。
有沒有機會實現上述類似的東西?
如果對象是不相關的,但你肯定知道他們有具體的方法,你可以使用反射調用它,用字符串的方法名 –
謝謝,我會牢記以備將來使用。我現在再次考慮使用繼承,因爲我發現上級會在我的應用程序中產生其他積極影響。每個類現在都會繼承上一個類,而其他已經繼承的類將通過它們的基類繼承上級類。所以一切都應該沒問題。 –