CArchive 演算子 << および >> の使用法
CArchive は、ファイルに対して単純データ型、または CObjectの秒を読み書きするに << と >> 演算子を提供します。
オブジェクトをアーカイブによってファイルに格納します。
次の例では、アーカイブによってファイルでオブジェクトを保存する方法を示しています:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
前に、ファイルに格納されている値からオブジェクトを読み込むには
次の例は、前に、ファイルに格納されている値からオブジェクトを読み込む方法について:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
通常、 CObjectの Serialize の関数 (ユーザーが DECLARE_SERIALIZE のマクロで宣言する必要がない派生クラスでアーカイブによってファイルに対する読み取りデータ保存します。CArchive のオブジェクトへの参照が Serialize の関数に渡されます。Serialize 関数がファイルまたはストアのデータからファイルへの読み取りデータに呼び出されたかどうかを確認するに CArchive のオブジェクトの IsLoading 関数を呼び出しますします。
シリアル化 CObjectの Serialize の関数の派生クラスには、次の形式があります:
void CSerializableObj::Serialize( CArchive& archive )
{
// call base class function first
// base class is CObject in this case
CObject::Serialize( archive );
// now do the stuff for our specific class
if( archive.IsStoring() )
{
// TODO: add storing code here
}
else
{
// TODO: add storing code here
}
}
上のコード テンプレートは厳密に 1 AppWizard がドキュメント ( **CDocument)**の Serialize 関数にから派生したクラス作成するのと同じです。次の例のように保存コードと読み込みコードが並列常にコントロールである必要があるため、このコード テンプレートに、より確認しやすいコードを作成します:
void CEmployee::Serialize( CArchive& archive )
{
// call base class function first
// base class is CObject in this case
CObject::Serialize( archive );
// now do the stuff for our specific class
if( archive.IsStoring() )
archive << m_strName << m_wAge;
else
archive >> m_strName >> m_wAge;
}
ライブラリは 2 番目のオペランドと 1 番目のオペランドと CArchive の << と >> 演算子と、次のデータ型とクラス型定義します:
CObject* |
サイズと CSize |
float |
WORD |
CString |
POINT と CPoint |
DWORD |
BYTE |
RECT および CRect |
Double (倍精度浮動小数点型) |
LONG |
CTime および CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
[!メモ]
アーカイブによって CObjectの保存と読み込みの秒は追加の考慮事項が必要です。詳細については、 アーカイブによって保存と読み込みの CObjectsを参照してください。
CArchive << と >> の演算子は 1 番目のオペランドである CArchive のオブジェクトへの参照を常に返します。これは、後で説明するように、演算子を連結することができます:
archive << m_strName << m_wAge;