2

これはポインタで動作します:

CGVector* v = {1, 2};
CGPoint* p = (CGPoint*)v;

ここではポインターではないため、これは機能しませんが、これは典型的なケースです。

CGVector v = {1, 2};
CGPoint p = (CGPoint)v;

それでも、両方の構造体が同じサイズ (2x CGFloat) であるため、CGVector を CGPoint に「キャスト」する方法はありますか。 ?

4

1 に答える 1

1

dasblinkenlight のコードCGPoint p = *((CGPoint*)&v);は、2 つのデータ構造が同じメモリ レイアウト/パディングなどを持っていると仮定して動作します。

ただし、このコードは引き続きメモリを新しい変数にコピーするため、安全な方法 (メンバーごとのコピー) を実行するよりもそれほど高速ではないことに注意してください。いずれにせよ、これらの種類のハッキーな最適化を決定する前に、Instruments を使用してください。

少なくとも、タイプ間で変換するマクロまたは関数を作成する必要があります。このハックを実行したい場合は、マクロ/関数で実行して、コードにあまり影響を与えずに後で変更できるようにします。

于 2013-09-16T14:26:07.917 に答える