기본 클래스를 수락하는 함수를 호출 할 때 Dynamic_cast를 사용해야합니까?

StackOverflow https://stackoverflow.com/questions/1613706

  •  06-07-2019
  •  | 
  •  

문제

다음과 같은 수업이 있습니다.

interface class IA
{
};

interface class IB
{
};

public ref class C : public IA, public IB
{
};

public ref class D
{
    void DoSomething(IA^ aaa)
    {
    }

    void Run()
    {
        C^ bob = gcnew C();
        DoSomething(dynamic_cast<IA^>(bob));    // #1
        DoSomething(bob);           // #2
    }
};

현재 나는 그러한 함수를 호출 할 때 항상 동적 캐스팅을 사용하려고 노력합니다 (위의 #1).
그러나 코드를 매우 추악하게 만들므로 실제로 필요한지 알고 싶습니다.

이런 식으로 Dynamic_cast를 사용합니까? 그렇다면 주된 이유는 무엇입니까?

도움이 되었습니까?

해결책

우리가 알고 있기 때문에 bob 유형입니다 C^, 우리는 컴파일 시간에 다운 캐스트 될 수 있음을 알고 있습니다. IA^ 안전하게 dynamic_cast 동일합니다 static_cast 여기. 또한, 당신이 제안한 암시 적 캐스트도 안전합니다.

dynamic_cast 기본 유형에서 파생으로 업 캐스트 할 때만 필요합니다.

다른 팁

Standard C ++에서는 Dynamic_cast를 사용하여 계층 구조를 걸어가는 것이 아닙니다. 이 경우 IA 또는 IB를 C로 변환하는 데 사용합니다.

IA^ temp = /* get a C in some way. */;
C^ tempC = dynamic_cast<C^>(temp);

아니요, C ++/CLI에서는 여기에 동적 캐스트가 필요하지 않다고 생각합니다. 모호성 WRT 다중 상속이없는 한, 파생*는 암시 적으로 기본으로 변환*입니다. "GC-Pointers"도 마찬가지입니다. C ++에서 동적 캐스트 (업 캐스팅시)에는 다형성 클래스가 필요합니다 (적어도 하나의 가상 기능이있는). 그래도 C ++/CLI가 어떻게 처리하는지 모르겠습니다. 나는 모든 CLI 클래스가 기본적으로 다형성이라고 생각합니다.

그건 그렇고 C ++ 태그를 제거 할 수 있습니다. ;)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top