cxx""" std::vector a = std::vector (5,6); "-6ren">
gpt4 book ai didi

c++ - 将 Cxx vector 转换为 Julia vector

转载 作者:太空狗 更新时间:2023-10-29 20:02:13 24 4
gpt4 key购买 nike

julia> using Cxx
julia> cxx""" #include <vector> """
true
julia> cxx""" std::vector<int> a = std::vector<int> (5,6); """
true
julia> icxx""" a[0]; """
(int &) 6
julia> b = icxx""" a; """
(class std::vector<int, class std::allocator<int> >) {
}
julia> b[0]
6
julia> b
(class std::vector<int, class std::allocator<int> >) {
}

当输入 Julia 终端时,上面的代码显示 vector 数据存在。但是,我更愿意将它完全转移到 Julia 数组中。执行此操作的最佳方法是什么?

注意:最终共享库将返回 std::vector<int> ,所以更明确地说,问题是如何最好地转换 std::vector<int>成标准的 Julia vector 。 (这是指示例代码中的变量 b)。

提前致谢。

编辑: 出现问题的原因似乎不清楚,所以希望以下内容会有所帮助(它直接来自上面的代码)

julia> unsafe_wrap(Array, pointer(b), length(b))
ERROR: MethodError: objects of type Ptr{Int32} are not callable
julia> @cxx b;
ERROR: Could not find `b` in translation unit
julia> cxx" b; "
In file included from :1:
__cxxjl_17.cpp:1:2: error: C++ requires a type specifier for all declarations
b;
^
true
julia> icxx" b; "
ERROR: A failure occured while parsing the function body
julia> cxx" &b; "
In file included from :1:
__cxxjl_15.cpp:1:3: error: C++ requires a type specifier for all declarations
&b;
^
__cxxjl_15.cpp:1:3: error: declaration of reference variable 'b' requires an initializer
&b;
^
true
julia> icxx" &b; "
ERROR: A failure occured while parsing the function body
julia> @cxx &b;
LLVM ERROR: Program used external function 'b' which could not be resolved!

无论您如何尝试传递 julia 引用变量,它都无法解析回 c++ 环境(最后一个完全破坏了 julia)。也不能使用用于将 c++ 引用传递给 julia 的相同方法。试图捕获 b 的指针, @b , b[0]&b[0]并解析这些工作。

最佳答案

如果可以复制数据,您可以调用 C++ vector 上的 collect 将其复制到 julia vector 中。如果您想避免复制,您可以使用 icxx"&a[0];" 获取数据的地址并使用 unsafe_wrap 包装它。

关于c++ - 将 Cxx vector 转换为 Julia vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44786952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com