[過去ログ]
物凄い勢いで誰かが質問に答えるスレ@ゲーム製作技術 (1001レス)
物凄い勢いで誰かが質問に答えるスレ@ゲーム製作技術 http://game.5ch.net/test/read.cgi/gamedev/1005204354/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
967: 名前は開発中のものです。 [age] 02/06/28 13:40 ID:??? GameProgrammingGemsのセクション1.3 自動シングルトンユーティリティ で、下のコードがなにをやってるのかわかりません。誰か説明してくれませんか? template<typename T> class Singleton { static T* ms_Singleton; public: Singleton() { int offset = (int)(T*)1 - (int)(Singleton<T>*)(T*)1; ms_Singleton = (T*)((int)this + offset); } ... }: クラステンプレート自体のサイズとTのサイズを足したものをシングルトンに 割り当ててるのかな?と思いますが、newした時点で割り当てられたアドレスの 後方を指してるような気がして不安です。よろしくお願いします。 http://game.5ch.net/test/read.cgi/gamedev/1005204354/967
969: 名前は開発中のものです。 [sage] 02/06/28 19:43 ID:??? >>967 operator newなんかがオーバーライドされてない? http://game.5ch.net/test/read.cgi/gamedev/1005204354/969
971: 名前は開発中のものです。 [sage] 02/06/28 19:59 ID:??? >>967 C++の内部構造はよくわからないが offsetってのは、その名の通りSingleton<T>クラスのインスタンスのポインタから Tクラスのインスタンスのポインタへのオフセットだろう。 1って数字は問題じゃない。いくつでもいい、 0で無い事に意味がある。本の受け売りだけどな。 んで、 (T*)((int)this + offset); は、新たにSingleton<T>クラスのインスタンスが生成されたとして そのSingleton<T>のインスタンスに属する?Tクラスのインスタンスの位置を 求めてる訳だ。 それをスタティックの箱に入れてやると。 つまりms_Singletonには、最後に生成されたTクラスのインスタンスのポインタが 入ることになる。 ・・・と思う。間違ってたら誰かフォローよろしこ。 http://game.5ch.net/test/read.cgi/gamedev/1005204354/971
973: 967 [sage] 02/06/28 21:27 ID:??? 本当に回答どうもありがとうございました >>969 いえ、本の中ではオーバーライドされていませんでした。 >>971 試しに2,3のクラスで使用してみたところ、どうもoffsetの値は 0になるようでした。 説明不足だったので申し訳ありませんがSingletonクラスは たとえば class CTextureMgr: public ISingleton<CTextureMgr> のように使うようです。はっきり言って私の頭ではこれだけでもチンプンカンプンですが、 無理やり自分を納得させるため次のように考えてみました。 クラステンプレートはコンパイル時に展開?されるために、本来ならば ベタに同じことを書いたクラスのサイズと一致しなければならないが、 コンパイラによってはそうならないかもしれない。 そのための保険としてオフセットを求め、それをスタティックな変数(シングルトン) に代入している。 …思いっきり見当はずれなことを言ってるかもしれませんね http://game.5ch.net/test/read.cgi/gamedev/1005204354/973
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.044s