gpt4 book ai didi

python - SWIGging Boost.Geometry 时出现 "Syntax error in input"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:38 32 4
gpt4 key购买 nike

错误信息:

Error: Syntax error in input(1)

我的 Swig 文件:

%module interfaces

%{
#include <vector>
#include <list>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/linestring.hpp>
typedef boost::geometry::model::d2::point_xy<double> Point;
typedef boost::geometry::model::polygon<Point, true, false> Polygon;
%}

%include "std_vector.i"
%template(MultiPolygon) std::vector<Polygon>;
%template(pgon) Polygon;

如果我注释掉最后一行,它会编译

// %template(pgon) Polygon;

我一直在重新阅读有关模板的 swig 部分,但我完全不明白哪里出了问题。我做错了什么,我该如何解决?

最佳答案

即使 Polygon 是 typedef 或特化的别名,您仍然需要将 %template 与您关心的实际模板一起使用,例如:

%template(pgon) polygon<Point, true, false>;

您还需要向 SWIG 展示足够的所涉及类型的定义/声明,以便它弄清楚发生了什么并使用正确的类型。

因此,最小的完整接口(interface)文件是:

%module poly

%{
#include <vector>
#include <list>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/linestring.hpp>
%}

%inline %{
typedef boost::geometry::model::d2::point_xy<double> Point;
typedef boost::geometry::model::polygon<Point, true, false> Polygon;
%}

namespace boost {
namespace geometry {
namespace model {
template<typename P, bool CW, bool CL> struct polygon {};
namespace d2 {
template <typename T> struct point_xy {};
}
}
}
}

%include "std_vector.i"
%template(Point) boost::geometry::model::d2::point_xy<double>;
%template(pgon) boost::geometry::model::polygon<Point, true, false>;
%template(MultiPolygon) std::vector<Polygon>;

这是因为 SWIG 需要知道它包装的每个类型的定义以及 %template 指令。您还需要使您编写的 typedef 对 SWIG 和 C++ 编译器都可见,我使用 %inline 来避免重复它们。

关于python - SWIGging Boost.Geometry 时出现 "Syntax error in input"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412617/

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