gpt4 book ai didi

c++ - 在 boost::geometry::for_each_point 中使用 lambda

转载 作者:行者123 更新时间:2023-11-30 02:44:15 30 4
gpt4 key购买 nike

我想将 boost::model::polygon 转换为 boost::model::multi_point,这是我的实现:

namespace bg = boost::geometry;
typedef bg::model::point<double, 3, bg::cs::cartesian> point3d;

bg::model::multi_point<point3d> result;
std::function<void(point3d)> appendPoint = [result](point3d point){
bg::append(result, point);
};

bg::for_each_point(polygon, appendPoint);

但是这段代码给我一个错误:

error: passing ‘boost::remove_reference<const boost::geometry::model::multi_point<boost::geometry::model::point<double, 3ul, boost::geometry::cs::cartesian> > >::type {aka const boost::geometry::model::multi_point<boost::geometry::model::point<double, 3ul, boost::geometry::cs::cartesian> >}’ as ‘this’ argument of ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = boost::geometry::model::point<double, 3ul, boost::geometry::cs::cartesian>; _Alloc = std::allocator<boost::geometry::model::point<double, 3ul, boost::geometry::cs::cartesian> >; std::vector<_Tp, _Alloc>::value_type = boost::geometry::model::point<double, 3ul, boost::geometry::cs::cartesian>]’ discards qualifiers [-fpermissive]

如果我没理解错的话,这种错误表示常量正确性有问题。但是我真的不知道,这段关于const的代码有什么问题。任何人都可以向我解释,我的错误在哪里,并且急于解决它?

最佳答案

问题是 bg::append 的第一个参数应该是对 result 的引用,而 result 是由你的值捕获的 lambda 。将捕获更改为

[&result](point3d point)

对于按值捕获,它会报告有关 const 正确性的错误,因为您将临时对象作为期望非 const 引用的参数传递。如果它是常量,则不会报告错误。

关于c++ - 在 boost::geometry::for_each_point 中使用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388035/

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