У меня вопрос по функторам. Я построил простой класс:
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 ) не печатает точки, и фактически оба вектора пусты. Я предполагаю, что такое поведение ожидается, однако я не могу понять, как очищаются векторы. Я думал, что у вас могут быть функторы с состоянием.
Почему векторные поля x и y в экземпляре полипринтера пусты?