c++ - 将指针转换为不同类型的 vector

标签 c++ pointers vector casting

我有一个函数需要一个指向 uint16_t 类型 vector 的指针。此函数用数据填充 vector 。我也有对象应该保存数据,但形式为 uint8_t 类型的 vector 。我的代码如下所示:

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);

是不同类型vector指针转换的保存方式吗?

最佳答案

你可能会这样做:

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);

当然,这是不安全的代码,所以我不会这样做,除非您确切知道这里的权衡是什么。

关于c++ - 将指针转换为不同类型的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776154/

相关文章:

c++ - 从派生类数组读取访问冲突

c++ - 是否有等同于 gsl_multifit_wlinear() 的 Eigen C++ 库?

c - 没有库函数的 C 中的反向字符串函数

c++ - 用空 vector 的 M 个元素初始化 vector c++

c++ - SSE 内联汇编和可能的 g++ 优化错误

c++ - 获取数组/vector 末尾地址的未定义行为?

c++ - 修复 QObject : Cannot create children for a parent that is in a different thread

c++ - 在不同的类 C++ 中构造类属性数组

c++ - 在 C/C++ 中,char* arrayName[][] 是指向指针的指针还是指向指针的指针?

C++溢出新关键字调试