gpt4 book ai didi

c++ - boost::geometry:for_each_segment 怎么做?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:56 25 4
gpt4 key购买 nike

我试图弄清楚 boost::geometryfor_each_segment 是如何工作的。文档告诉我,for_each_segment 需要一个几何图形和一个 Functor。在我的示例中,这个仿函数称为 polylength_helper,只要此代码段未编译,我就在那里递增一个数字以保持简单,直到它编译。<​​/p>

// foo.h

typedef boost::geometry::model::point<double, 2, bg::cs::cartesian> GeographicPoint;
typedef boost::geometry::model::linestring<GeographicPoint> GeographicPolyLine;
typedef boost::geometry::model::segment<GeographicPoint> GeographicSegment;

double poly_length(const GeographicPolyLine&);

template<typename Segment>
struct polylength_helper{
polylength_helper() : length(0){};

inline void operator()(Segment s){
length += 1;
};

double length;
};

// foo.cpp

double poly_length(GeographicPolyLine &poly){
polylength_helper<GeographicSegment> helper;
bg::for_each_segment(poly, helper);
return helper.length;
}

嗯,这不编译。我使用 clang 来获得更易于理解的输出,它说:

note: candidate function not viable: no known
conversion from 'model::referring_segment<point_type>' to
'boost::geometry::model::segment<boost::geometry::model::point<double, 2,
boost::geometry::cs::cartesian> >' for 1st argument
inline void operator()(Segment s){
^

谁能帮帮我?尤其是我不知道消息中的 referring_segment 来自哪里。

这是文档中的示例:

http://www.boost.org/doc/libs/1_48_0/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_segment_2_const_version.html

但是除了 typedef 之外,我不知道这与我的版本有何不同。

最佳答案

换行

typedef boost::geometry::model::segment<GeographicPoint> GeographicSegment;

typedef boost::geometry::model::referring_segment<GeographicPoint> GeographicSegment;

这会让你编译。


来自 segment 上的文档和 referring_segment ,两者之间的唯一区别是 referring_segment 持有对点的引用。这是修改段的 for each 中所需要的,因为修改的点应该反射(reflect)在 linestring 中。在不修改点的 for each 中,它仍应采用引用(很可能是 const 引用),因为它减少了复制量。

关于c++ - boost::geometry:for_each_segment 怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447161/

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