【发布时间】:2014-04-25 03:36:18
【问题描述】:
我有这些 C++ vector<int> 的 C 绑定,我用 CFFI 封装。
我知道如何使用std_carrayTovector 创建vector<int>s,然后使用std_vectorToCArray 将数据转换回int 指针,以便我可以使用CFFI 函数MEM-AREF 在Lisp 中检索数据。我为下面的内容写了正确的defcfuns。
我的问题是:如何将 defcfun 的 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)))
【问题讨论】:
-
如果有抄袭,那不是
O(1)。 -
如此有效,您正在寻找已经由 C 数组支持的 lisp 中向量的实现。如果你必须复制数据,它不可能是 O(1)。
-
@Ben Voigt 你能在这个问题上给我任何帮助吗,关于 acomar 的建议。感谢您加入顺便说一句:)
标签: c++ common-lisp cffi