C ++/CLI에서 객체 유형을 확인하는 방법은 무엇입니까?
문제
객체의 유형을 확인하는 간단한 방법이 있습니까? 다음 줄을 따라 무언가가 필요합니다.
MyObject^ mo = gcnew MyObject();
Object^ o = mo;
if( o->GetType() == MyObject )
{
// Do somethine with the object
}
else
{
// Try something else
}
현재 나는 중첩 트리 캐치 블록을 사용하고 있습니다. System::InvalidCastException
못생긴 느낌이지만 작동합니다. 나는 위의 코드와 같은 것을 시도하고 프로필을 시도하여 더 빠르거나 느리게/읽을 수 있지만 구문을 해결할 수 없는지 확인하려고했습니다.
누군가가 궁금하다면, 이것은 단일 대기열이 작업 할 데이터를 제공하는 스레드에 들어가는 것에서 비롯됩니다. 때때로 나는 설정을 변경하고 데이터 큐를 통해 전달하는 것이 간단한 방법입니다.
해결책
당신이 사용할 수있는 MyObject::typeid
C ++/CLI에서와 같은 방식으로 typeof(MyObject)
C#에서 사용됩니다. 아래 코드 아래 코드는 귀하의 질문에서 뻔뻔스럽게 복사하고 수정되었습니다 ...
MyObject^ mo = gcnew MyObject();
Object^ o = mo;
if( o->GetType() == MyObject::typeid )
{
// Do somethine with the object
}
else
{
// Try something else
}
다른 팁
체크 아웃해야합니다 방법 : 구현은 C ++의 C# 키워드입니다.:
이 주제는 IS의 기능을 구현하는 방법과 Visual C ++에서 C# 키워드로 보여줍니다.
편집하다: 나는 이것을 여기에 남겨 둘 것이다. 그러나이 대답은 C ++를위한 것입니다. 아마도 CLI를 위해 이것을하는 것과 약간 관련이 없을 것입니다.
RTTI (실행 시간 유형 정보)로 컴파일해야합니다. 그런 다음 Wikipedia 기사를보십시오 http://en.wikipedia.org/wiki/runtime_type_information RTTI를 검색하고 Google을 검색하십시오. 당신을 위해 일해야합니다.
반면에 모든 데이터 클래스에 대한 가상 기본 클래스를 원할 수도 있습니다.