创建返回结构数组的API函数

时间:2018-01-26 12:50:29

标签: c++

我正在尝试在C++中创建将由各种编程语言(如Java,C ++,C#)使用的库。代码将是跨平台的(Linux / Windows)。一个函数应该返回简单结构的数组:

struct Aaa {
    int c;
    int d;
}

Aaa数组传递给调用者的最佳方法是什么?

我在考虑有助于将[] Aaa传递给调用者的函数签名,但它的实现很复杂。

void abc(Aaa* a[], *int array_length ) 
{
...
}

其中一个选择是返回std :: vector,但我想Java和C#对此不满意吗?

1 个答案:

答案 0 :(得分:2)

  

将被各种编程语言(如Java,C ++,C#)使用

在这种情况下,您需要使用C语言的API。您可以为每种语言创建一个包装器,以使C API更方便,但共享代码必须位于C API之后。 API函数本身可以用C ++定义。

  

创建返回结构数组的API函数

你不能在C中返回数组。一种方法是动态分配一个数组,但这有时是不可取的。

数组的创建通常由两个子目标组成:数组的分配和初始化数组的元素。通常,设计一个C API是个好主意,这样库本身就不会分配数组。数组可以由调用者分配。这在跨语言库中特别方便,在这些库中,某些语言具有完全不同的内存分配策略。

在C中,使用指向数组第一个元素的指针传递数组。如果长度不同,您也会发送。像这样:

void abc(Aaa array[], size_t size)
// alternative spelling that is semantically equivalent:
void abc(Aaa* array, size_t size)