我有这些用于 C++ 的 C 绑定,这些 C 绑定vector<int>
在 CFFI 中。
我知道如何创建vector<int>
sstd_carrayTovector
并将数据转换回int
指针 with ,std_vectorToCArray
以便我可以使用 CFFI 函数在 Lisp 中从中检索数据MEM-AREF
。我defcfun
为下面的内容写了正确的。
我的问题是:如何将defcfun
for的输出转换std_vectorToCArray
为 Lisp 向量(例如#(1 2 3)
)并使其成为 O(1) 操作——即同时复制所有数据。
vector_int* std_carrayTovector(int* a, size_t len) {
vector<int>* v = new vector<int>;
for(size_t i = 0; i < len; i++)
v->push_back(a[i]);
return v;
}
int* std_vectorToCArray(vector_int* s) {
return s->data();
}
(defcfun ("std_vectori_to_carray" %vector-int-to-c-array) :pointer
(s (:pointer vector-int)))