2013-03-04 5 views
1

나는 얼마 동안 개발 해왔다. 그리고이 짐승들은 때때로 MFC, wxWidgets 코드에 등장하지만, 정확히 어떤 일을하는지에 대한 정보는 찾을 수 없습니다.누구나 DYNAMIC_CLASS를 몇 가지 용어로 설명 할 수 있습니까?

나는 dynamic_cast가 코어 C++에 통합되기 전에 나타났습니다. 그리고 그 목적은 즉석에서 객체 생성과 런타임 동적 캐스팅을 허용하는 것입니다.

하지만 여기에는 내가 찾은 모든 정보가 끝납니다.

DLL 내에서 DECLARE_DYNAMIC_CLASS 및 IMPLEMENT_DYNAMIC_CLASS를 사용하는 샘플 코드가 실행되었으며 내 보낸 클래스에 사용됩니다. 그리고이 구조는 나를 혼란스럽게합니다.

왜 이렇게 했습니까? 그 플러그인 기반 접근 방식, 어디에 LoadLibrary 호출하고 다음 CreateDynamicClass 필요한 형식으로 캐스팅 할 수있는 포인터를 얻으려면 호출 할?

DECLARE/IMPLEMENT_DYNAMIC은 DLL 경계에서 작동합니까? 클래스조차도 DLLEXPORT에 그렇게 안전하지 않기 때문에 여기에는 기존의 문제 외에도 커스텀 RTTI 테이블이 있습니다.

DYNAMIC_CLASS에서 다른 클래스의 클래스를 파생시킬 수 있습니까? 어떻게 작동합니까?

누구든지 이러한 것들이 무엇인지 또는 주제에 대해 두 문장 이상을 찾을 수있는 곳을 설명해 주실 수 있습니까?

+0

이 답변은 유용 할 수 있습니다. http://stackoverflow.com/questions/14318993/why-is-declare-dynamic-ness-for-dynamic -downcast/14319634 # 14319634 – snowdude

답변

1

이 항목은 클래스에 추가 정보 유형 정보를 추가하여 런타임 독립적 인 방식으로 RTTI를 사용하여 클래스를 만드는 공장 및 기타 여러 가지 작업을 수행 할 수 있습니다. COM, QMetaObject 등에서 비슷한 접근법을 찾을 수 있습니다

+0

크로스 모듈 방식과 섞여 있습니까? 객체가 한 모듈에서 선언되고 다른 모듈에서 사용된다면? 유형 조회 테이블은 일반적으로 어디에 저장됩니까? – Coder

+0

http://docs.wxwidgets.org/trunk/overview_rtti.html에서 말했듯이 그것은 정적 인'wxClassInfo' 인스턴스들의 링크드리스트로 저장됩니다. 모듈 경계를 넘어서 사용하는 것이 안전합니다. 그러나 클래스 사용 안전성은 COM 에서처럼 크로스 모듈 안전성에 달려 있습니다. 'QueryInterface'는'dynamic_cast'와 비슷한 COM입니다 만, 인터페이스가'std :: vector'와 같은 클래스를 사용한다면 (Debug/Release/Runtime ver에서 메모리 레이아웃이 다를 수 있습니다), 그 사용법은 안전하지 않습니다 – kassak

0

DECLARE/IMPLEMENT_DYNAMIC의 정의를 살펴 보셨습니까?

MS 세계에서 모두 대문자는 일반적으로 매크로를 나타 내기 때문에 정의를 검색하고 거기에서 수행중인 작업을 해결할 수 있습니다. Visual Studio를 사용하는 경우 정의로 건너 뛰기 위해 누를 수있는 열쇠가 있습니다. 그 내용을보고이를 확인하고 거기서 작업하려고 시도하십시오.

관련 문제