在不同的非相关对象上调用相同的函数?

时间:2014-01-30 17:07:12

标签: .net function object c++-cli

我有一组对象,所有类型都不同,比如说

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。

有没有机会实现上述内容?

1 个答案:

答案 0 :(得分:1)

为什么接口会失败?

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

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

然后每个类都可以实现这个接口......