> 백엔드 개발 > C++ > 본문

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

Mary-Kate Olsen
풀어 주다: 2024-10-31 21:18:02
원래의
125명이 탐색했습니다.

How to Serialize and Deserialize Classes with Custom Data Type Members in C  ?

C에서 사용자 정의 데이터 유형 멤버가 있는 클래스 직렬화

문제:

어떻게 하나요? 사용자 정의 데이터 유형의 여러 멤버가 포함된 클래스를 효율적으로 직렬화 및 역직렬화합니까?

답변:

사용자 정의 데이터 유형이 포함된 클래스를 효율적으로 직렬화 및 역직렬화하려면 다음을 고려하십시오. :

권장 인터페이스:

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man);
Mango                deserialize(std::span<uint8_t const>> data);</code>
로그인 후 복사

구현:

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man) {
    std::vector<uint8_t> bytes;
    do_generate(back_inserter(bytes), Man);
    return bytes;
}

Mango deserialize(std::span<uint8_t const> data) {
    Mango result;
    auto  f = begin(data), l = end(data);
    if (!do_parse(f, l, result))
        throw std::runtime_error("deserialize");
    return result;
}

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

void deserialize(std::istream&amp; is, Mango&amp; Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator<char> f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}</code>
로그인 후 복사

사용자 정의 데이터 유형 파서 및 생성기:

사용자 정의 데이터 유형의 직렬화/역직렬화를 처리합니다(자세한 예는 답변 참조).

이식성:

  • 필요한 경우 엔디안이 일관되게 유지되는지 확인하세요.
  • Boost Endian(헤더 전용)을 사용하여 크로스 플랫폼 엔디안을 정규화하는 것이 좋습니다.

추가 참고 사항:

  • 효율적인 직렬화를 위해서는 사용자 정의 데이터 유형을 간단하게 복사할 수 있어야 합니다.
  • 부스트 직렬화에는 연결이 필요하므로 직접 사용하지 마세요.
  • 제안된 헤더 전용 도우미 사용을 고려하세요. 유연성과 효율성을 위한 기능입니다.

위 내용은 C에서 사용자 정의 데이터 유형 멤버를 사용하여 클래스를 직렬화 및 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!