我必须为仅具有旧式“写出指针”访问器的 API 创建一个迭代器。有问题的 API 是 OGR 的;有问题的课程之一是OGRLineString
(供参考:http ://www.gdal.org/classOGRLineString.html )。该类存储了许多点,可以使用以下 getter 方法访问:
void OGRLineString::getPoint(int pos, OGRPoint *out)
为了使用访问器,创建一个新OGRPoint
对象并将指向它的指针传递给方法,该方法将数据写入分配的对象。例如:
OGRPoint *p = new OGRPoint();
lineString->getPoint(0, p);
现在,我想实现一个(类似 STL 的)迭代器。即使我在各处放置大警告标志,说明提供的sOGRPoint
是不可修改的(即const
,要求我传递一个自定义分配的实例,但迭代器必须分配一个。另外,当迭代器本身被删除时,迭代器返回的 s 不应该被删除。此外,不存储为 复制的实际实例,而是存储 x/y/z 坐标的简单结构;所有需要的附加信息(例如,空间参考)都复制到访问器中。因此,一个简单的OGRLineString
OGRPoint const &operator*() const
OGRPoint
OGRPoint
OGRLineString
OGRPoint
getPoint
#define private public
hack 无济于事。
是否有任何理智/干净的方法来添加迭代器而不修改原始源OGRLineString
?例如,有没有办法向原始类添加特性或修改它,就像 Ruby 的“猴子补丁”特性那样?或者观察容器的生命周期以清理OGRPoint
迭代器返回的实例?