"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 사용자 정의 데이터 유형을 사용하여 C++ 클래스를 직렬화 및 역직렬화하는 방법은 무엇입니까?

사용자 정의 데이터 유형을 사용하여 C++ 클래스를 직렬화 및 역직렬화하는 방법은 무엇입니까?

2024년 11월 11일에 게시됨
검색:216

How to Serialize and Deserialize a C   Class with Custom Data Types?

C에서 사용자 정의 데이터 유형의 멤버가 있는 클래스의 직렬화를 수행하는 방법은 무엇입니까?

문제

목표는 C 클래스를 직렬화 및 역직렬화하는 것입니다. 사용자 정의 데이터 유형의 멤버를 포함하는 Mango.

구현

권장되는 구현에는 다음이 포함됩니다. 기능:

std::vector serialize(Mango const& Man);
Mango                deserialize(std::span data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);

데이터 유형에 대한 사용자 정의

모든 관련 유형(ValType, FuntionMango, MangoType 및 Mango 포함)에 사용자 정의가 필요합니다:

// Define `do_generate` and `do_parse` functions
// for custom data types.

구현 예

void serialize_to_stream(std::ostream& os, Mango const& Man) {
    do_generate(std::ostreambuf_iterator(os), Man);
}

void deserialize(std::istream& is, Mango& Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}

이식성 고려 사항

  • 엔디안을 정규화해야 할 수 있으며, 이는 수동으로 수행하거나 Boost Endian(헤더 전용)과 같은 라이브러리를 사용하여 수행할 수 있습니다.

추가 참고 사항

  • 이 접근 방식을 사용하면 데이터를 효율적으로 저장하고 서로 다른 프로세스 간에 전송할 수 있습니다. Systems.

라이브 예시:

https://coliru.stacked-crooked.com/a/288829ec964a3ca9

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3