質問をする前に、「類似した」質問がいくつかあることを理解していると言いたいのですが、私の質問に具体的に答えるものは何もありません (見つけることができる)。
以下が可能かどうか疑問に思っています。new
次のように、クラスのインスタンスを作成するとします。
MyClass* classInstance = new MyClass();
生のメモリアドレスをintのようなプリミティブ型に保存できるかどうか疑問に思っています。次に、へのポインターがない C++ の無人地帯のどこかで、classInstance
次のようなことができます。
MyClass* myClassInstanceSomewhereInMemory = (MyClass*)0x12345678;
myClassInstanceSomewhereInMemory->workPlzKThx(); //Yay, it works!
これが可能である場合、リスクはありますか? そのようなことのオーバーヘッドに大きなコストはありますか? 私はこのかなり貧弱な設計を理解していますが、残念ながら私はここで第三者に翻弄されています. だから、これで私を責めないでください。:)
この狂気の説明では、なぜ私がこのようなばかげたことをしなければならないのかを
もう少し詳しく説明します。box2D を AIR ネイティブ拡張に移植していますが、前述のように、AIR ランタイムに翻弄されています。ネイティブ側と Actionscript 側の間の関連付けを処理する方法は...めちゃくちゃで、さらに、この関連付けを行うためのばかげたルールがたくさんあります。
そのようなルールの 1 つは、(プライベート コンストラクターを持つ) 型b2World->createBody()
へのポインターを返す のような状況で実際の問題を引き起こします。b2Body
この関連付け中に、コンテキストを同時に作成して新しいポインターを関連付けることはできません。b2Body
これは、この呼び出し中に のコンテキスト内で立ち往生しているためですb2World
。b2World
したがって、 andのようなクラス内で一連の汚いハックを一緒に平手打ちするのではなくb2Body
、 int のようなプリミティブ型を使用して、 new のメモリアドレスを保存して返すことができるかどうか疑問に思っていますb2Body
。
C++ から型付けされたポインターまたは構造体を Actionscript 側に返すことができません。コンテキストに関連付けることしかできません...しかし、プリミティブ型を返すことはできます。