for_each 中的 c++ "this" 指针

c++ "this" pointer in for_each

我正在阅读别人的代码,这部分让我很困惑。任何人都可以向我解释 *this 在这里指的是什么以及这一行 (for_each(node->items.begin(), node->items.end(), *this);) 的作用吗?这段代码来自于在 R/R* 树中搜索一个元素。我认为这里我们应该为 for_each(begin,end,functor) 提供一个仿函数,但我不知道 *this(在我看来它是“node->items”向量的一个元素)实际上会做什么。

// this functor recursively walks the tree
        template <typename Acceptor, typename Visitor>
        struct QueryFunctor : std::unary_function< const BoundedItem, void > {
                const Acceptor &accept;
                Visitor &visitor;

                explicit QueryFunctor(const Acceptor &a, Visitor &v) : accept(a), visitor(v) {}

                void operator()(BoundedItem * item)
                {
                        Node * node = static_cast<Node*>(item);

                        if (visitor.ContinueVisiting && accept(node))
                        {
                                if (node->hasLeaves)
                                        for_each(node->items.begin(), node->items.end(), VisitFunctor<Acceptor, Visitor>(accept, visitor));
                                else
                                        for_each(node->items.begin(), node->items.end(), *this);
                        }
                }
        };

R* tree是一种查询性能较好的R树(但构建成本略高)。 R树是一种包含目录(非结束节点)和叶子(结束节点)的数据结构。节点的成员 bool hasLeaves 表示该节点是包含目录(hasLeavesfalse)还是叶子(hasLeavestrue)。目录只是递归遍历而已,而叶子才是我们感兴趣的。

当代码调用 for_each(..., *this) 时,它将为给定范围内的每个项目调用 QueryFunctor::operator()(BoundedItem * item)for_each 可以接受一个函数或一个带有给定参数的 operator(),在这种情况下它是 operator()。给定范围的元素实际上是 Node* 类型,但是 Node 是从 BoundedItem 派生的,因此参数类型匹配。这在您在 static_cast 行中提供的代码中可见,但为了更好地理解,我阅读了完整的代码 here.