1

タイプ のベクトルへのポインターを必要とする関数がありますuint16_t。この関数は、ベクトルにデータを入力します。データを保持する必要があるオブジェクトもありますが、タイプのベクトルの形式uint8_tです。私のコードは次のようになります。

void fill1(vector<uint16_t> *data);
void fill2(vector<uint64_t> *data);

class Object
{
    uint32_t data_depth;
    vector<uint8_t> data;
}

Object object1;
object1.data_depth = 16;
fill1((vector<uint16_t>*) &object1.data);

Object object2;
object2.data_depth = 64;
fill2(vector<uint64_t>*) &object2.data);

// somewhere later in the code
if (object1.data_depth == 16)
   vector<uin16_t> * v = (vector<uint16_t>)(&objec1.data);

型の違うベクトルのポインタ変換の保存方法ですか?

4

2 に答える 2

3

おそらく次のようなことができます:

template <typename T>
void fill(vector<unsigned char>& data)
{
    assert(data.size() % sizeof(T) == 0);

    T* pReinterpreted = reinterpret_cast<T*>(&data[0]);
    size_t count = data.size() / sizeof(T);

    // do some stuff with your array of reinterpreted values
}

class Object
{
    uint32_t data_depth;
    vector<unsigned char> data;
}

Object object;
fill<uint16_t>(object.data);

当然、これは安全でないコードなので、トレードオフが何であるかを正確に理解していない限り、私はそれを行いません。

于 2013-07-21T19:56:57.960 に答える