gpt4 book ai didi

c++ - 在 boost 缓冲区调用后丢失自定义点类型的数据

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:17 25 4
gpt4 key购买 nike

我有自己的观点

class LocationWayPoint
{
public:
latlong_container location;
WORD index;
PWeakBasicStation station;
};

namespace boost { namespace geometry { namespace traits {
BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(LocationWayPoint, 2, double, cs::cartesian)

template<> struct access<LocationWayPoint, 0> {
static inline double get(LocationWayPoint const& p) {return p.location.longitude; }
static inline void set(LocationWayPoint& p, double const& value) {p.location.longitude = value; }
};
template<> struct access<LocationWayPoint, 1> {
static inline double get(LocationWayPoint const& p) {return p.location.latitude; }
static inline void set(LocationWayPoint& p, double const& value) {p.location.latitude = value; }
};
}}}
typedef bg::model::linestring<LocationWayPoint> location_linestring_t;

....

location_linestring_t ls1;

我像这样(在循环中)填满了这一点

LocationWayPoint point;
/* point.index = counter; */
point.index = 7777;
point.location.longitude = (lo_type == mongo::NumberDouble) ? point_record.getField("lo").Double() : std::atof(point_record.getField("lo").String().c_str());
point.location.latitude = (lo_type == mongo::NumberDouble) ? point_record.getField("lat").Double() : std::atof(point_record.getField("lat").String().c_str());
ls1.push_back(point);

当我使用 ls1.push_back(point);我可以访问索引值

LOG4CPLUS_DEBUG(logger,  "LocationWay::LoaderWay in " << bg::get<0>(ls1[0]) << " d2 "  << bg::get<1>(ls1[0]) << " index "<< ls1[0].index);

out = DEBUG - LocationWay::LoaderWay in xxx d2 xxx index 7777

但是当我将 replace push_back 方法调用到

bg::append(ls1, point);  

我明白了

DEBUG - LocationWay::LoaderWay in xxx d2 xxx index 17 <--uninit value

当我调用 bg::buffer 时也是如此

boost::geometry::model::multi_polygon<location_polygon_t> result; 

boost::geometry::buffer(ls1, result,
distance_strategy, side_strategy,
join_strategy, end_strategy, circle_strategy);

任何没有位置的值都设置为未初始化(

最佳答案

我认为您已经直接诊断出问题:使用算法“丢失”附加的外部信息,原因很简单,即创建的点是新点

顺便说一下,这是初始化所有成员数据的一个很好的理由 - 即使是在 POD 结构中也是如此。

因此,您的问题的基础似乎是假设,即缓冲区算法以某种方式保留了原始点 - 只是移动它们并保留它们包含的其余值。假设不正确。

我可以推测原因:也许是为了适应使用共享点/几何和(因此?)不可变数据的自定义几何模型。

文档支持

文档没有直接描述这个(作为)限制。但这是关键点:它没有描述任何关于允许/处理无关数据的点概念是图书馆不处理的明确标志。这是 Point Concept ,例如:

enter image description here

请注意它确实如何具有traits::access,但它没有克隆点(包括无关数据?)的概念

关于c++ - 在 boost 缓冲区调用后丢失自定义点类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676309/

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