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终端时,会显示向量数据已存在。但是,我更喜欢将其完全转换为Julia数组。最佳方法是什么?
注意:最终,一个共享库将返回一个std::vector<int>
,因此问题更明确,即如何最好地将std::vector<int>
转换为标准的Julia向量(这指的是示例代码中的变量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]
的指针并解析这些内容是可行的。
test/std.jl
。然后执行v = icxx"std::vector<int32_t>{2, 4, 6, 8, 10, 12, 14};"
,接着使用unsafe_wrap(Array, pointer(v), length(v))
就可以正常工作了。 - Isaiah Nortona
,而问题所在是变量b
的转换。 - user3303504