Declare _ serial/implement _ serial 매크로에 대한 기술적 세부 사항 (전환) DECLARE_DYNAMIC 은 지원 유형 정보를 나타냅니다. 이 매크로를 통해 클래스가 어떤 클래스인지 확인할 수 있습니다 (예: ;
클래스 a;
클래스 b: 공용 a;
A a;
B b;;
Class *pA 는 개체를 가리킵니다. pA 가 a 개체를 가리키는지 b 개체를 가리키는지 어떻게 알 수 있습니까? 이때 유형 정보가 있으면 pA 가 어떤 개체인지 알 수 있습니다. 사실, 그 내부의 구현 원리는 문자열이기 때문에 이 판단을 할 때 실제로 문자열 비교입니다.
DECLARE_DYNCREATE 는 동적으로 생성된다는 뜻입니다. Com 과 약간 비슷한 클래스 공장입니다.
이것은 실제로 클래스 CRunTime class 를 사용하여 클래스의 정적 생성 함수의 주소를 기록합니다. 이 기능은 여러 곳에서 사용해야 합니다. 아래에 설명된 DECLARE_SERIAL 이 고전적인 예입니다.
동적 생성은 주로 만들려는 객체가 어떤 클래스인지 알 수 없지만 기본 클래스에서 파생된 것이 분명하다는 것을 알고 있습니다.
DECLARE_SERIAL 은 객체 배열 (클래스 a, b, c 를 포함할 수 있는 객체) 을 저장하고 저장 상황에 따라 정확하게 로드할 수 있는 완전 자동화된 저장 메커니즘인 직렬화 특성을 나타냅니다. 이는 간단해 보이지만 고려해야 할 문제가 있습니다 클래스 C 의 개체는요. (여기 세 가지 다른 클래스가 있습니다.) 그리고 MFC 의 디자이너는 이 메커니즘을 처음 작성했을 때 어떤 클래스가 나올지 전혀 몰랐고, D 클래스가 나타날 수도 있습니다. 어떻게 하죠?
저장 메커니즘에는 클래스 종류를 결정할 수 있는 코드가 있어야 합니다. 따라서 직렬화 메커니즘 DECLARE_SERIAL 에는 DECLARE_DYNAMIC 이 포함되어 있어 파일에 저장할 때 클래스 이름을 파일에 저장할 수 있습니다.
OK, 우리가 로드할 때, 우리는 어떤 종류를 로드할 것인지 알 수 있지만, 우리는 어떻게 그것을 만들 수 있습니까? 따라서 DECLARE_SERIAL 에는 개체 생성을 위한 DECLARE_DYNCREATE 도 포함되어 있습니다.
그렇다면 DECLARE_SERIAL 의 특별한 점은 무엇일까요? 첫째, 운영자 gt 를 구현해야합니다. Gt; (구체적인 이유는 심층적이고 얕은 것, 버전 관리를 통해 직렬화를 처리할 때 유연성을 발휘할 수 있습니다.
첫째, DECLARE_SERIAL 의 주된 용도는 스마트 스토리지라는 점을 기억하십시오. 그래서 우리는 이 스마트 기능을 사용하지 않아도 됩니다.
DECLARE_SERIAL 이 없고 void cmes SG:: serialize (carchiveamp; Ar) 인 경우 이렇게 저장할 수 있습니다.
Cdocument:: serialize (ar)
{
If (ar.isstoring())
{
//객체 저장
Pmes SG-gt; Serialize (ar);
}
Else
{
#111#