我正在尝试在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#对此不满意吗?
答案 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)