我需要调用一个需要结构指针作为参数的 API 函数。
假设它是这个结构
struct SomeObject{
double a;
double b;
}
要调用的函数:func(SomeObject*)
这里的问题是我只能访问作为自定义结构的数据,但是像 SomeObject 一样的结构作为 vector 给出。
struct CustomObject{
double a;
double b;
}
而且编译器会抛出错误,因为它们是不同的参数。 cannot convert 'std::vector<CustomObject>' to 'SomeObect*' in argument passing
.我已经尝试将 CustomObject 作为指针传递,但它当然仍然是一个不同的对象。
有没有机会让这个工作像我想做的那样?可能的方法是什么?
最佳答案
您不能将 std::vector
传递给需要指针的函数。如果函数需要一个指向数组的指针,那么您可以使用 std::vector::data
现在,这给我们留下了 vector 包含错误类型的对象的问题。当您需要 SomeObject*
时,std::vector::data
返回的指针将是 CustomObject*
类型。它们不相关,但类型相同,幸运的是,standard layout types .只要满足这两个要求,我们就可以保证类型具有相同的表示形式。因此,我们可以简单地将指针转换为reinterpret_cast。 :
func(reinterpret_cast<SomeObject *>(vec.data()));
The compiler is now showing 'cast away qualifiers'. It seems to have a problem with because CustomObject is currently a const.
我的意思是 vector 是 const
,或者它是 const
对象的 vector 。在那种情况下,您不应该将它的数据传递给一个函数,该函数接受一个指向非const
的指针。但是,如果您知道该函数不会修改对象,尽管它采用了指向非常量的指针,并且您想摆脱编译器警告,那么您必须显式地放弃常量,使用 const_cast .
关于c++ - vector 到指针的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888814/