С большой помощью Яна Струба на сайте Джулии Дискурс я разработал подход, который работает:
module BoostWrapper
using CxxWrap
@wrapmodule("libboost_wrap")
function __init__()
@initcxx
end
export Point2D, PointVec, getx, gety,
Polygon2D, PolygonVec, add_vertex, scale_polygon, get_vertices,
poly_intersection, intersection_point
end
using Main.BoostWrapper
import Base: getindex, length, convert, iterate, size
iterate(it::PointVec) = length(it) > 0 ? (it[1], 2) : nothing
iterate(it::PointVec, i) = i <= length(it) ? (it[i], i+1) : nothing
length(it::PointVec) = Main.BoostWrapper.size(it)
getindex(it::PointVec, i) = Main.BoostWrapper.at(it, convert(UInt64, i - 1))
eltype(::Type{PointVec}) = Point2D
p1 = Point2D(-10.0, 10.0)
p2 = Point2D(10.0, 10.0)
p3 = Point2D(10.0, -10.0)
p4 = Point2D(-10.0, -10.0)
obstacle = Polygon2D()
add_vertex(obstacle, p1)
add_vertex(obstacle, p2)
add_vertex(obstacle, p3)
add_vertex(obstacle, p4)
pts = get_vertices(obstacle)
for pt in pts
println("current pt: ", getx(pt), ", ", gety(pt))
end
Я включил много деталей, потому что оказалось, что былитонкости, связанные с разрешением имен и т. д.