c++ - vector 到指针的转换

标签 c++ api vector struct

我需要调用一个需要结构指针作为参数的 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/

相关文章:

C++ 映射值被损坏

c# - C++ 到 C# 代码转换,引用与值类型的麻烦

php - 使用 PHP 和 Cron 更新 Facebook 状态

math - 某个角度的扰动向量

c++ - 如何使用 cin 从控制台读取整数到 vector 中

r - subset() 删除向量上的属性;如何维护/坚持它们?

c++ - OOP 设计 - protected 成员不在自己的类中使用 - 但仅在子类中使用

c++ - printf ("%2$*11$s", ...) 这个队形是什么意思

api - LARAVEL 8 - 没有数据库的 Eloquent 模型从 API 导入数据

api - 我如何将 Google Analytics API 与 Zend OAuth 一起使用?