0

継承した古いコードがあり、それを維持していて、できるだけ変更したくありません。新しいコンパイラではコンパイルできません。

コードには他にもありますが、基本的には (どんなに悪いことであっても) 任意のレコード サイズのレコードのテーブルの先頭に void* を渡すという考えです。この関数は醜くなるので、この関数の外で変更を加えたくありません。unsigned char* にキャストして加算を行ってから void* にキャストしたいだけだと思いますが、正しいキャストなどを理解するのに苦労しています.

助言がありますか?

元のコードは次のとおりです。

foo(const void* recordArrayBasePtr ,ubin32 sizeOfStruct)
{
   void * recordPtr;
   int row = 9; //for example
   recordPtr = const_cast<void *>( recordArrayBasePtr ) + sizeOfStruct * row;
}
4

1 に答える 1

0

にキャストしたいのですがchar*、これは ではreinterpret_castなく で行われconst_castます。しかし、これが実際には C コードであることを考えると、C スタイルのキャストを使用することもできます。

 recordPtr = (void*)((char*)recordArrayBasePtr + sizeofStruct * row);
于 2013-09-24T20:00:32.253 に答える