Foundation > グラフィック・オブジェクト > 新規グラフィック・オブジェクト・クラスの作成 > オブジェクト記述の保存と読み込み
 
オブジェクト記述の保存と読み込み
ここで、クラス概要で DeclareTypeInfo マクロを使用して宣言した入出力関数を使用します。
copy メンバー関数および read メンバー関数
メンバー関数 copy および read を定義するために、次のマクロも使用できます。
IlvPredefinedIOMembers(IlvShadowEllipse);
このマクロは、IlvRegisterClass のように、関数定義ブロックの外部、実装ファイル内で使用しなければなりません。
これは、以下と同等です。
IlvGraphic*
ShadowEllipse::read(IlvInputFile& input, IlvPalette* palette)
{
return new ShadowEllipse(input, palette);
}
IlvGraphic*
ShadowEllipse::copy() const
{
return new ShadowEllipse(*this);
}
スタティック・メンバー関数 read は、クラス読み込みコンストラクターを呼び出し、新しいインスタンスを返します。マクロ DeclareIOConstructors は、ヘッダー・ファイルで読み込みコンストラクターおよびコピー・コンストラクターを宣言します。これらのコンストラクターの定義は、実装ファイルで次のように書く必要があります。
ShadowEllipse::ShadowEllipse(IlvInputFile& f,
IlvPalette* pal)
: IlvSimpleGraphic(f, pal),
_rect(),
_thickness(0)
{
int thickness;
f.getStream() >> _rect >> thickness;
_thickness = (IlvDim)thickness;
_invertedPalette = 0;
computeInvertedPalette();
}
上記のコンストラクターは、スーパークラスの読み込みコンストラクターを呼び出し、そのコンストラクターはストリーム・オブジェクトからスーパークラス固有の情報を読み込みます。この後、サブクラスは自分の情報を読み込めます。
メンバー関数 copy は、IlvShadowEllipse のコピーを作成し、クラス・コピー・コンストラクターを呼び出します。
ShadowEllipse::ShadowEllipse(const ShadowEllipse& source)
: IlvSimpleGraphic(source),
_rect(source._rect),
_thickness(source._thickness)
{
_invertedPalette = source._invertedPalette;
_invertedPalette->lock();
}
write メンバー関数
メンバー関数 write は、矩形寸法および影の幅を指定した ostream 出力ストリームに書き込みます。
void
ShadowEllipse::write(IlvOutputFile& f) const
{
f.getStream() << _rect << IlvSpc() << (int)_thickness;
}
この write メソッドは特別です。これは IlvSimpleGraphic スーパークラスに書き込む情報がないためです。スーパークラスに書き込む情報がない場合、スーパークラス write メソッドを呼び出して read メソッドとの一貫性を保ってください。以下は、通常の write メソッドの例です。
void
IlvRoundRectangle::write(IlvOutputFile& os) const
{
IlvRectangle::write(os);
os.getStream() << IlvSpc() << _radius;
}
IlvRegisterClass マクロ
IlvRegisterClass(ShadowEllipse, IlvSimpleGraphic);
関数の本文外で、IlvShadowEllipse クラスを IlvSimpleGraphic クラスのサブクラスとして登録する必要があります。

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.