テンプレート化された共用体を使用しているので、ポインタ(64ビットマシンにデータが送信されているので32ビットマシンであっても)に対して常に64ビットフィールドを取得することができます。ユーザーとキャストの両方を保存することができます。デフォルトの共用体メンバを設定する
template <typename type> union lrbPointer
{
uint64_t intForm;
type ptrForm; //assumed that type is a pointer type
};
//usage
lrbPointer<int*> myPointer;
int integers[4];
myPointer.ptrForm = integers;
myPointer.intForm += 2; //making it easy to jump by less then sizeof(int)
これは私のためにうまくいきますが、私は本当にデフォルトメンバーを作る方法を見つけるのが大好きです。ユーザーが使用したいポインタの後に.ptrFormを使用する必要はありません。
これを行うことはできません(デフォルトのユニオンメンバー)。どのように役立ちますか。 2台のマシン間でポインタ値を送信すると、同じアーキテクチャであっても、その値は他のマシン上のものを意味しないため、データ転送/ストレージ戦略に問題があるように聞こえるでしょうか? –
私は受信機にデータのブロックを開始するメモリアドレスを要求しています。その情報で、受信側のマシン上のポインタを計算することができます。もちろん、送信側のマシンではすべてを読むことができませんが、私の目標は、両方のマシン上のプロセッサーと環境が非常に異なるため、送信側のマシンでより多くの作業を行うことです。 現時点では、この問題はユーザーのための見た目の混乱の問題にすぎません。私は機能しています。 – Adam