gpt4 book ai didi

填充 vector 的 C++ 有状态仿函数

转载 作者:行者123 更新时间:2023-11-30 03:55:18 27 4
gpt4 key购买 nike

我有一个关于仿函数的问题。我构建了一个简单的类:

    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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com