0

MASM32 コンパイラで、ポインターを構造体と見なす ASSUME ディレクティブを覚えています。C++でこれを行う方法はありますか? たとえば、私はこれをしたい:

char* test = new char [sizeof MyStruct + MAX_REALIGN];
MyStruct* data = test;
data.member = 1;

これが必要な理由は、新しいデータで再コンパイルする必要がある構造体へのポインターがあり、元の構造体のサイズを大きくして、メンバーの一部を再調整するためです。再コンパイルが完了したら、新しい構造体を参照しなくなります。再コンパイルを行う前に参照が必要なだけです。

理解するのが少し難しいように聞こえますが、問題は非常に単純です。ポインターを構造体として参照する方法はありますか? (安全ではないこと、携帯性がないことなどは知っています)。

4

2 に答える 2

1

Reinterpret_cast は、関連のないクラスであっても、任意のポインター型を他の任意のポインター型に変換します。

于 2012-08-01T23:21:31.053 に答える
0

MyStruct* data = reinterpret_cast<MyStruct*>(test);

または、c スタイルのキャストを使用することもできますが、この場合は機能的に同等です。

MyStruct* data = (MyStruct*)test;

これは一般的に推奨されません。なぜなら、C スタイルのキャストは値をあなたの言うことに強制するからです。ただし、それは基本的に再解釈キャストで行っていることなので、よりクリーンな構文は価値があるかもしれません (ただし、なぜこのようにしているのか疑問に思います)。

于 2012-08-01T23:38:37.003 に答える