我有一个函数需要一个指向 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/