【发布时间】:2015-03-19 02:24:25
【问题描述】:
我有一个关于函子的问题。我建立了一个简单的类:
class PolygonPrinter {
private:
std::vector<float> x;
std::vector<float> y;
public:
inline void operator()(Point& p) {
x.push_back(boost::geometry::get<0>(p));
y.push_back(boost::geometry::get<1>(p));
}
void printPoints() {
for(int i=0; i < x.size(); i++) {
std::cout << "("
<< x[i] << "," << y[i]
<< ")" << std::endl;
}
}
}
我想用作函子。这用于类似
PolygonPrinter<point_2d> polyPrinter;
boost::geometry::for_each_point( polygon, polyPrinter );
polyPrinter.printPoints();
现在看来仿函数部分工作正常,因为我看到向量填充了所有多边形元素(因此 for_each_point 可以按预期工作),但是,第三次调用( printPoints )不打印任何点,实际上两个向量都是空的.我想这种行为是意料之中的,但是,我无法理解向量是如何被清除的。我以为你可以有状态函子。
为什么 polyPrinter 实例中的向量场 x 和 y 为空?
【问题讨论】:
-
我猜,您的 for_each_point 正在获取原始 polyPrinter 的副本。因此,副本填充了点,您会看到它,但原始仍然是空的
标签: c++ boost functor boost-geometry