未知の数値型へのポインターを定義することは可能ですか?int
または、逆参照時にdouble
常に特定の型、たとえば、を返しますか?double
これをやり始めて、
int a = 7;
double b = 3.14;
void* c = static_cast<void*>(&a);
void* d = static_cast<void*>(&b);
double e = *(static_cast<double*>(c));
double f = *(static_cast<double*>(d));
しかしもちろん、 anint*
を aにキャストすると意味double*
不明な for が生成されるだけです。なぜなら、 an の内部ビットをあたかもフォーマットされているかe
のように再解釈するからです。int
double
確かにもっと良い設計オプションがあるはずなので、なぜこれを行う必要があるのか を事前に真剣に答えようとしましたが、説明は冗長になりました。要するに、レガシーコードに関係しており、一部変更できない部分があり、影響を受けるコンポーネントをとにかく書き直すことを計画しているため、現在、回避策が可能かどうかを調査しています.
私の骨抜きバージョンが骨抜きになりすぎた場合に備えて、ここにもう 1 レベルの詳細があります。以前は (共有メモリ内の) へのポインターだったものを逆参照することにより、 を返さなければならないメソッドを使用していますが、現在は も指している可能性があります。ポインターが別の場所を指すように設定されたときに呼び出される「フック」があり、その時点でポインターが を指すか を指すかがわかります。したがって、私が考えられる唯一のことは、そのフック中にメンバー変数に型を格納 (またはフラグを設定) し、逆参照する前にその型のポインターにキャストすることです。double
void
double
int
double
int
しかし、誰かが私が見逃しているかもしれない便利なトリックやテクニックを知っていることを望んでいました. フックをまったく変更する必要がないように、ポインターを格納したり型を整理したりする他の方法 (他の説明が面倒な理由から、それを避けたいと思います)。