boost::geometry: How to do for_each_segment?
boost::geometry: How to do for_each_segment?
我试着弄清楚how boost::geometry
的for_each_segment
list工作。文档告诉我,for_each_segment
需要一个几何和函子。这个函子在我的例子中被称为polylength_helper
,只要这个代码片段没有编译,我就在那里增加一个数字以保持事情简单,直到它编译。
// 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
s。
修改行
typedef boost::geometry::model::segment<GeographicPoint> GeographicSegment;
typedef boost::geometry::model::referring_segment<GeographicPoint> GeographicSegment;
这将让你编译。
从关于segment和referring_segment的文档来看,两者之间的唯一区别是referring_segment保存了对点的引用。这是a中每个修改段所需要的,因为修改的点应该反映在linestring
中。在a中,for each不修改点,它仍然应该接受一个引用(很可能是const
引用),因为它减少了复制的数量。
相关文章:
- C++ 中用于二维数组的 for-each 循环
- 计算 fib(n) 的次数称为 FOR EACH n
- 支持自定义 const 本机C++容器类的"for each"
- C++ for-each 语句触发"vector iterators incompatible"断言失败:this->_Getcont() == 0
- 为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?
- 当循环返回"for each"项的 nullptr 时?
- 正确使用C++ 'for each'选项
- "for each"能保证使用更改数组吗?
- 基于范围的循环与 for-each 循环有何不同
- C++:从"for each"循环中的映射中删除值
- 将函数应用于std::map值,其中包含for each和lambda函数
- 正在擦除for(-each)自动循环中的项目
- g++ 4.4.7 -std=gnu++0x 应该编译"for each"结构吗?
- 将循环转移到C++03 for each
- 在 for-each 循环中使用 'auto' 时是否需要添加'const'?
- C++中的"for each"循环如何知道数组的长度
- 基本c++: for-each循环
- 如何使c++中的for each循环函数与自定义类一起工作
- 如何使用for-each循环来美化析构函数
- for-each 循环生成错误,但 for(it=begin()...在遍历 std::map 包含 unique_ptr 时不会