私はC++を初めて使用しますが、C#を何年も使用していますが、ここでは役に立ちません。:)
私の問題:私は、私が取り組んでいるObjective-CのiPhoneゲームから派生したActorクラスを持っています。衝突をテストしているので、またはの実際の実行時タイプに応じて、のインスタンスを適切に設定したいと思います。これを次のようにテストする私のコード:BallPegBallPegactorAactorB
// Actors that collided
Actor *actorA = (Actor*) bodyA->GetUserData();
Actor *actorB = (Actor*) bodyB->GetUserData();
Ball* ball;
Peg* peg;
if (static_cast<Ball*> (actorA)) { // true
ball = static_cast<Ball*> (actorA);
}
else if (static_cast<Ball*> (actorB)) {
ball = static_cast<Ball*> (actorB);
}
if (static_cast<Peg*> (actorA)) { // also true?!
peg = static_cast<Peg*> (actorA);
}
else if (static_cast<Peg*> (actorB)) {
peg = static_cast<Peg*> (actorB);
}
if (peg != NULL) {
[peg hitByBall];
}
ballとが設定されたらpeg、メソッドの実行に進みますhitByBall(Objectivec)。
私の問題が本当にあるのは、キャスト手順にありBallますactorA。最初のif (static_cast<>)ステートメントがステップインし、ballポインターを適切に設定します。
2番目のステップは、適切なタイプをに割り当てることpegです。私は型でpegあるべきだとPeg以前は知っていましたがactorB、実行時に型を検出すると、実際に3番目のif (static_cast<>)ステートメントがステップインされてこれを設定したことに驚きました。これは、ifステートメントがでactorAあるかどうかを確認するためのものでしたPeg。知っactorAているBall!なぜそれは4番目のifステートメントではなくここに足を踏み入れたのでしょうか?
私が推測できる唯一のことは、キャストがc#とどのように異なるかということです。つまりactorA、実際に型がBall派生しているものを検出し、実行Actor時に 派生していることが検出されたので、これは有効なテストですか?これはすべて、私がの使用をどのように誤解したかに帰着する可能性があります。どうすれば必要なことを達成できますか?:)static_cast<Peg*> (actorA)PegActorstatic_cast
ifとんでもない発言がたくさんある、ここでの長々とした野蛮なキャスティングの試みのように私が感じることについて、私は本当に不安です。とに保持されている実際のタイプに応じて、単純なキャストPegとキャストを実現するためのよりエレガントな方法があると確信しています。BallactorAactorB
誰かが助けてくれることを願っています!:) どうもありがとう。