複製オブジェクトへの安全な参照(アクセサ)を作成します。 [詳解]
#include <NetZ/src/Core/DOCore/RefTemplate.h>
公開メンバ関数 | |
RefTemplate () | |
無効な参照として初期化します。 | |
RefTemplate (DOHandle hDO) | |
複製オブジェクトハンドルを利用して初期化します。 [詳解] | |
RefTemplate (const DORef &oRef) | |
コピーコンストラクタです。 [詳解] | |
DuplicatedObject * | GetDOPtr () const |
この参照が示す複製オブジェクトのポインタを取得します。 [詳解] | |
DOHandle | GetHandle () const |
この参照が示す複製オブジェクトのハンドルを取得します。 [詳解] | |
qBool | IsHard () const |
このDORefが、複製オブジェクトへの「強い」参照であるかどうかを返します。 [詳解] | |
qBool | IsSoft () const |
このDORefが、複製オブジェクトへの「弱い」参照であるかどうかを返します。 [詳解] | |
DO * | operator* () |
複製オブジェクトへのアクセスを提供します。 [詳解] | |
qBool | Poll () |
DORefの参照が有効かどうかを試行します。 . [詳解] | |
void | SetHard () |
DORefを「強い」参照に設定します。 [詳解] | |
void | SetSoft () |
DORefを「弱い」参照に設定します。 [詳解] | |
qBool | Wait (qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT) |
DORefが有効になるか、タイムアウトが経過するまで待ちます。 [詳解] | |
複製オブジェクトへの安全な参照(アクセサ)を作成します。
これは薄いテンプレートであり、共通部分は、DORef に実装されます。 テンプレート引数には複製オブジェクトクラス名を指定しますが、 これは、複製オブジェクトクラスにtypedefされるRefを利用することもできます。 たとえば、Avatarという複製オブジェクトクラスに対する、この参照クラスはAvatar::Refでtypedefされます。
このシステムでは、複製オブジェクトへの安全な方法でのアクセスは参照によるものです。 このRefTemplateは複製オブジェクトへの安全な参照を提供します。 複製オブジェクトの参照を作ることでC++の関数を呼び出すことが出来るようになります。 もしもオブジェクトへの参照があれば、それをC++のオブジェクトのように扱うことが出来るようになります。
複製オブジェクトへの参照がある限り、複製オブジェクトポインターは システムによって無効化されることはありません。典型的には、 オブジェクトへの参照はスタック上に構築され、不要になったら削除されます。 重要なのは、オブジェクトがステーションの複製オブジェクトストアから 取り除かれようとしているとき(RemoveFromStoreOperation)でさえも、 オブジェクトに対する参照は短い期間だけに抑えることです。 システムは複製オブジェクトのデストラクタは参照が残っている限り呼び出すことが出来ません。
DOHandle を明示することによってか、オブジェクトへの参照を明示することによって 参照を作成することができます。代入演算子を利用することによって後で指定するために、 デフォルトのコンストラクタも利用することが出来ます。
DO | 参照する複製オブジェクトのクラスを指定します。 |
nn::nex::RefTemplate< DO >::RefTemplate | ( | DOHandle | hDO | ) |
複製オブジェクトハンドルを利用して初期化します。
複製オブジェクトハンドル(DOHandle)は、セッション中に存在する複製オブジェクトを 一意に表すことが出来るハンドルです。このコンストラクタでは複製オブジェクトハンドルから 複製オブジェクトへの安全な参照を作成します。
正しく複製オブジェクトのハンドルの参照が構築できた場合、 DORef::IsValid() がtrueを返します。
[in] | hDO | 参照対象の複製オブジェクトのハンドルを指定します。 |
nn::nex::RefTemplate< DO >::RefTemplate | ( | const DORef & | oRef | ) |
コピーコンストラクタです。
指定した参照の指す複製オブジェクトを参照して初期化します。
正しく複製オブジェクトのハンドルの参照が構築できた場合、 DORef::IsValid() がtrueを返します。
[in] | oRef | 参照のコピー元を指定します。 |
DO* nn::nex::RefTemplate< DO >::operator* | ( | ) |
複製オブジェクトへのアクセスを提供します。
この関数によって返されるポインタによって関数などに安全にアクセスすることが出来ます。
|
inherited |
この参照が示す複製オブジェクトのハンドルを取得します。
|
inherited |
|
inherited |
|
inherited |
DORefを「弱い」参照に設定します。
複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 この参照は、実行時に強い参照から弱い参照に変更することもできますし、その逆もまた可能です。 強い参照は、オブジェクトが常に関連していることを保証し、DuplicatedObject::DeleteMainRefが 呼び出されない限り、ローカルステーションにて最新の状態を保ち続けます。 この参照の使い分けは、現時点ではローカルステーションに関連性の無かったオブジェクトを取ってくる際 (DuplicatedObject::FetchDuplica)によく使われます。 対照的に、弱い参照はオブジェクトの関連性に影響を及ぼさないので、デュプリカは複製スペース機能によって 関連性があると判断されたときにのみ更新されます。 強い参照と弱い参照の選択は、参照されたオブジェクトの状態を最新のものにキープしておきたいかどうかによって 決まります。
例を挙げます。仮想世界において、プレイヤーとは別世界にいるチームメイトの状態(位置、所持品など)の リストを最新の状態にキープしておきたいならば、それらのオブジェクト(デュプリカ)が常に最新の状態に 更新されるようにするため、強い参照を使うでしょう。 一方、敵キャラクターのようなケースでは、ローカルステーションで無駄に状態の更新はしないでしょうから、 おそらく弱い参照を使うでしょう。 弱い参照を使う場合は、そのオブジェクトはローカルステーションに関連が出てくるようになってから (複製スペースの条件にマッチしたら)更新の対象となります。
|
inherited |
DORefを「強い」参照に設定します。
複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 この参照は、実行時に強い参照から弱い参照に変更することもできますし、その逆もまた可能です。 強い参照は、オブジェクトが常に関連していることを保証し、DuplicatedObject::DeleteMainRefが 呼び出されない限り、ローカルステーションにて最新の状態を保ち続けます。 この参照の使い分けは、現時点ではローカルステーションに関連性の無かったオブジェクトを取ってくる際 (DuplicatedObject::FetchDuplica)によく使われます。 対照的に、弱い参照はオブジェクトの関連性に影響を及ぼさないので、デュプリカは複製スペース機能によって 関連性があると判断されたときにのみ更新されます。 強い参照と弱い参照の選択は、参照されたオブジェクトの状態を最新のものにキープしておきたいかどうかによって 決まります。
例を挙げます。仮想世界において、プレイヤーとは別世界にいるチームメイトの状態(位置、所持品など)の リストを最新の状態にキープしておきたいならば、それらのオブジェクト(デュプリカ)が常に最新の状態に 更新されるようにするため、強い参照を使うでしょう。 一方、敵キャラクターのようなケースでは、ローカルステーションで無駄に状態の更新はしないでしょうから、 おそらく弱い参照を使うでしょう。 弱い参照を使う場合は、そのオブジェクトはローカルステーションに関連が出てくるようになってから (複製スペースの条件にマッチしたら)更新の対象となります。
|
inherited |
この参照が示す複製オブジェクトのポインタを取得します。
|
inherited |
|
inherited |
DORefが有効になるか、タイムアウトが経過するまで待ちます。
[in] | uiTimeout | 待ち続ける最大の時間をミリ秒単位で指定します。 デフォルトでは無限に待つ(タイムアウトを設けない)となります。 |
true 待った結果、DORefが有効になったときに返ります。
false タイムアウトが経過したときに返ります。