gpt4 book ai didi

c++ - julia Cxx 在模块中封装不同的行为

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:05 28 4
gpt4 key购买 nike

我使用的是 Julia 1.1.1 和 Cxx 的 0.3.2 版。我发现当我从我定义的模块中调用 icxx""时出现错误,但在 REPL 中调用它时却没有。在我的 REPL 中:

using Cxx

function xformVectors()

cxx"""
#include <iostream>
#include <vector>

class Summer {
public:
Summer() {}
std::vector<int> compute_sum(const std::vector<std::vector<int>> &input) {
std::vector<int> result(input.size(), 0);
for (std::size_t i = 0; i != input.size(); ++i) {
for (std::size_t j = 0; j != input[i].size(); ++j) {
result[i] += input[i][j];
}
}
return result;
}
};
"""
as = [rand(1:10,5), rand(1:10,6)]
x = convert(cxxt"std::vector< std::vector< int > >", as)
summer = @cxxnew Summer()
cxx_v = icxx"$summer->compute_sum($x);"
for v in cxx_v
println(collect(v))
end

end

如果我随后调用 xformVectors(),它会写出几个整数并退出(预期行为)。如果我使用 Pkg.generate() 将这段代码包装在一个模块中,然后调用 xformVectors(),我会得到一个 fatal error :

ERROR: BoundsError: attempt to access 36-element Array{Tuple{AbstractString,Symbol,Int64,Int64,Bool},1} at index [37]
Stacktrace:
[1] getindex(::Array{Tuple{AbstractString,Symbol,Int64,Int64,Bool},1}, ::Int64) at ./array.jl:729
[2] #s37#70 at /home/jov9025/.julia/packages/Cxx/vxYtJ/src/cxxstr.jl:705 [inlined]
[3] #s37#70(::Any, ::Any, ::Any, ::Any) at ./none:0
[4] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any,N} where N) at ./boot.jl:522
[5] xformVectors() at /home/jov9025/sandbox/julia/Vector2Vector.jl/src/Vector2Vector.jl:30
[6] top-level scope at none:0

如果在 REPL 中包含源文件 (include("src/Vector2Vector.jl"),然后调用 Vector2Vector.xformVectors(),它会运行毫无怨言。

知道发生了什么吗?

最佳答案

我的代码中出现错误的行是:

cxx_v = icxx"$summer->compute_sum($x);" 

我仍然不明白 icxx""的问题是什么,但实际上我不需要在这个示例(或在我的实际代码中)中使用它。我可以只使用 @cxx 宏,瞧,没有崩溃:

cxx_v = @cxx compute_sum(x)

所以,我可能问错了问题(尽管我认为这是一个有趣的问题)。

2020 年 1 月回顾:使用 Cxx 版本 0.3.3,代码在 REPL 中使用原始 icxx""行执行良好。

关于c++ - julia Cxx 在模块中封装不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288244/

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