作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于仿函数的问题。我构建了一个简单的类:
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();
现在看来仿函数部分工作正常,因为我看到 vector 中填充了所有多边形元素(因此 for_each_point 按预期工作),但是,第三次调用( printPoints )不打印任何点,实际上两个 vector 都是空的.我想这种行为是预料之中的,但是,我无法理解 vector 是如何被清除的。我以为你可以有状态仿函数。
为什么 polyPrinter 实例中的 vector 字段 x 和 y 为空?
最佳答案
std
算法复制您的仿函数。 boost
可能做同样的事情。
您可以std::ref( functor )
通过伪引用传递它,您将获得您想要的行为。
boost::geometry::for_each_point( polygon, std::ref(polyPrinter) );
顺便说一句,您对 inline
的使用是多余的:类主体中定义的所有方法都是隐式 inline
。这是追踪错误的一些乐趣的来源。
关于填充 vector 的 C++ 有状态仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136169/
我是一名优秀的程序员,十分优秀!