C++에서 클래스를 직렬화하는 방법이 있습니까? 나는 클래스의 인스턴스가 아니라 클래스 자체를 언급하고있다. deserialize 할 때 어떤 클래스가 그것을 deserialize하는지 인스턴스화 할지는 모른다. 어떤 클래스가 표현되고 있는지를 어떻게 든 결정할 수 있고, 빈 인스턴스를 인스턴스화 한 다음 비 직렬화를 호출 할 수 있기를 원합니다. 설명에 대한C++에서 클래스 직렬화
편집 : 각 키는 강력한 형식의 값을 갖는 키 - 값 구조를 만드는 오전
. 어떤 키는 문자열을 저장해야하고, 다른 키는 int를 저장해야하며, 다른 키는 임의의 값을 저장할 수 있습니다. 나는 이것이 템플릿을 통해 컴파일러에 의해 시행되는 시스템을 고안했다.
Key 클래스는 두 개의 템플릿 매개 변수가 있습니다
- UniqueClass -
- 치형 (일반적으로 개념을 정의하는 처리기 기능에 정의 된) 개념 당 하나 개의 고유 한 클래스가 있어야한다 - 이것은 클래스입니다 이 개념에 대한 값이어야합니다.
Value 클래스는 추상 수퍼 클래스가있는 ValueType 만있는 템플릿 클래스이므로 boost :: any와 비슷한 클래스를 래핑 할 수 있습니다.
그럼 내 키 - 값 구조에 내가 가게를 가지고 있고 ConceptType과 치 형으로 템플릿되는 함수 검색 :
template<UniqueClass, ValueType>
void store(Concept<UniqueClass, ValueType> concept, ValueType value);
나는 개념의 값 유형을 설명하기 위해 같은 템플릿을 사용하고 있기 때문에과 일치하지 않으면 컴파일러가 불평 할 값으로 전달됩니다.
이제 키 - 값 저장소를 직렬화 할 수 있기를 원합니다. 따라서 어떻게 든 템플릿 기반의 Concept 클래스를 직렬화 한 다음 deserialization 중에 올바른 임의의 클래스를 인스턴스화해야합니다.
내가 serialize를 호출 할 수 있고 모든 적절한 객체가 스스로 직렬화하도록 요청할 수 있도록 직렬화하는 동안 인스턴스화 할 클래스가 무엇인지 알지 못하기 때문에 자체를 deserialize 할 것인지 묻습니다. 때문에 질문 편집으로 업데이트
"클래스를 serialize"하는 것이 무엇을 의미하는지 설명하십시오. 일련 번호, 정의 (메소드/필드)? 정적 멤버들? – cdhowie
작동하지 않는 코드를 표시하십시오. –
귀하의 질문에서 즉시 분명하지 않지만, 당신은 두 가지 다른 것을 요구하고있는 것처럼 보입니다. 1) 역 직렬화 할 클래스의 유형을 결정하는 방법 (일부 직렬화 된 메타 데이터가 필요하고 일부 유형의 팩토리 패턴을 사용할 수 있음) 2) 내용을 실제로 직렬화하는 방법 (다양한 방법으로 수행 할 수 있음). 여기에 몇 가지 예가 나와 있습니다. http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html – Chad