我有一个关于函数的问题。我建立了一个简单的类:C++有状态函子,填充向量
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的副本。因此,副本填充了点,你看到它,但原来仍然是空的 – 2015-03-19 02:48:35