我有一组对象,所有类型都不同,比如说
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 :(得分:1)
为什么接口会失败?
enum class EnumResult { ... };
enum class EnumPID { ... };
ref interface ISuperior
{
public:
EnumResult SetValueDebug (EnumPID i_enPID, Object^ i_Object);
}
然后每个类都可以实现这个接口......