2016-08-18 17 views
0

この構造体をシリアル化できるようにする方法がわかりません。私が研究を通して知ることができるのは、パッディングの設定の現実にすぎない、参照によってパディングしているメンバーのいずれも通過できないようです。私はプラグマ・パック・ステートメントを試しましたが、違いはありませんでした。boost :: serialize:ビットフィールドメンバ変数を持つ構造体

この構造体:あなたはのアドレスを取る、またはそれに言及することはできませんので https://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(v=vs.85).aspx

class SZ_DCB : DCB 
{ 
private: 
friend class boost::serialization::access; 

template<class Archive> 
void serialize(Archive &ar, const unsigned int version){ 
    ar & BOOST_SERIALIZATION_NVP(DCBlength); 
     ar & BOOST_SERIALIZATION_NVP(BaudRate); 
     ar & BOOST_SERIALIZATION_NVP(fBinary); 
     ar & BOOST_SERIALIZATION_NVP(fParity); 
     ar & BOOST_SERIALIZATION_NVP(fOutxCtsFlow); 
     ar & BOOST_SERIALIZATION_NVP(fOutxDsrFlow); 
     ar & BOOST_SERIALIZATION_NVP(fDtrControl); 
     ar & BOOST_SERIALIZATION_NVP(fDsrSensitivity); 
     ar & BOOST_SERIALIZATION_NVP(fTXContinueOnXoff); 
     ar & BOOST_SERIALIZATION_NVP(fOutX); 
     ar & BOOST_SERIALIZATION_NVP(fInX); 
     ar & BOOST_SERIALIZATION_NVP(fErrorChar); 
     ar & BOOST_SERIALIZATION_NVP(fNull); 
     ar & BOOST_SERIALIZATION_NVP(fRtsControl); 
     ar & BOOST_SERIALIZATION_NVP(fAbortOnError); 
     ar & BOOST_SERIALIZATION_NVP(fDummy2); 
     ar & BOOST_SERIALIZATION_NVP(wReserved); 
     ar & BOOST_SERIALIZATION_NVP(XonLim); 
     ar & BOOST_SERIALIZATION_NVP(XoffLim); 
     ar & BOOST_SERIALIZATION_NVP(ByteSize); 
     ar & BOOST_SERIALIZATION_NVP(Parity); 
     ar & BOOST_SERIALIZATION_NVP(StopBits); 
     ar & BOOST_SERIALIZATION_NVP(XonChar); 
     ar & BOOST_SERIALIZATION_NVP(XoffChar); 
     ar & BOOST_SERIALIZATION_NVP(ErrorChar); 
     ar & BOOST_SERIALIZATION_NVP(EofChar); 
     ar & BOOST_SERIALIZATION_NVP(EvtChar); 
     ar & BOOST_SERIALIZATION_NVP(wReserved1); 
} 
}; 

答えて

1

「フラグ」のビットフィールド(fBinaryfParityなど)は、この方法で直列化可能ではありません、ビットフィールド。

これらをシリアル化するには、ローカル変数に値を割り当て、シリアル化してから、変更可能なローカル値をビットフィールドに保存し直す必要があります。

ような何か:(。fBinaryが1ビットであるため、BYTEを使用して)

BYTE binary = fBinary; 
ar & BOOST_SERIALIZATION_NVP(binary); 
fBinary = binary; 

+0

クールああ、私はあなたが任意の変数をシリアル化可能性を知りませんでした。私はあなたがメンバーと私だけを渡すことができましたが、あなたはそれらのすべてを連載しなければなりませんでした。 –

+0

標準のC++を使うことをお勧めします。 'BYTE'はC++ではありません – sehe

+0

@seheそれはWindowsヘッダーで、DWORDやBYTEなどのさまざまなウィンドウ型のtypedefがあるので、私はBYTEを使用することにしました。 – 1201ProgramAlarm

関連する問題