2014-01-30 2 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 (... 

같은 것을 만드는 것이었다 그러나 나는 방법을 모른다.

내가 상속을 사용하여 생각 : m_aObject가 상속 클래스에서 액세스 할 수 있습니다

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; 
    ... 
} 

. 이게 효과가 있니?

다른 클래스의 클래스를 이미 상속하고 있기 때문에 상속이 실패 할 수 있습니다.
인터페이스 사용도 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

공통점이 없다면, 거의 방법이 없습니다 ... 물론 "결과"와 열거 형을위한 인터페이스를 가질 수도 있습니다 ... 더 복잡해집니다 .... –

관련 문제