翻訳的に翻訳する方法 `` char * ``を `` double * ``
-
21-12-2019 - |
質問
私はC ++を再生しています、そして私はboost::iostreams::mapped_file
を使って作業しようとしています。このクラスはファイルデータをchar*
にマッピングします.double*
にキャストします(ダブルスで動作しているので)。
Cスタイルのキャスト:double* foo = (double*) data
を使ってキャストできましたが、慣用のC ++を使用しようとしています。これは、次のようなC ++の許可C ++キャストです。
私は思い付きました:
double* data = static_cast<double*>((void*)file.data());
.
(file-> dataはstatic_cast
を返します)。
これは本当にクリーナーではありません。
これは私がやろうとしていることです(このコードはうまくいきます!):
BOOST_AUTO_TEST_CASE(OpenMMapArray){
typedef boost::multi_array_ref<double, 3> arrayd3;
typedef std::array<size_t, 3> index3d;
index3d shape = {{ 20, 20, 20 }};
size_t size = sizeof(double)*std::accumulate(shape.begin(), shape.end(), 1, std::multiplies<size_t>());
boost::iostreams::mapped_file file;
boost::iostreams::mapped_file_params params;
params.path = "/tmp/mmaptest-2";
params.mode = std::ios::in | std::ios::out;
params.new_file_size = size;
file.open(params);
double* data = static_cast<double*>((void*)file.data());
arrayd3 array(data, shape);
array[0][0][0] = 20;
array[0][1][0] = 19;
array[1][0][0] = 18;
array[0][0][5] = 17;
BOOST_CHECK(data[0] == 20);
BOOST_CHECK(data[20] == 19);
BOOST_CHECK(data[20*20] == 18);
BOOST_CHECK(data[5] == 17);
file.close();
}
. 解決
この特定のケースでは、実際にデータを別の型として再解釈しようとしています。そのため、reinterpret_cast
が順番にあります。
double* data = reinterpret_cast<double*>(file.data());
. 所属していません StackOverflow