のサイズがわかっていれば、data
19行目で作成できます。vvp.at(0)
vf
#include <iostream>
#include <vector>
typedef void* VoidPointer;
typedef std::vector< float > VF;
typedef std::vector< VoidPointer > VVP;
int main(int argc, char** argv)
{
VF vf;
vf.push_back(13.0f);
vf.push_back(14.0f);
vf.push_back(15.0f);
vf.push_back(16.0f);
VVP vvp;
vvp.push_back( (VoidPointer)const_cast<float *>( &(vf.front()) ) );
VF data ( static_cast< float* >( vvp.at(0) ),
static_cast< float* >( vvp.at(0) ) + vf.size() );
std::cout << "data.size() is " << data.size() << std::endl;
for(VF::const_iterator i = data.begin(); i != data.end(); ++i)
{
std::cout << "data contains " << *i << std::endl;
}
return 0;
}
これが賢明かどうかはさておき(例は考案されています)、のサイズがわからない場合は、にキャストvvp.at(0)
する方法を知りたいです。私は次のようなものの線に沿って考えています:std::vector<float>
vf
std::vector<float> data( *static_cast< std::vector<float>* >( vvp.at(0) ) );
しかし、それによりプログラムはstd :: bad_allocで終了します。必要に応じて、コピーしてもかまいません。