boost :: bind与动态参数?

时间:2015-11-13 03:47:59

标签: c++ boost lambda

我有一个Person对象的容器。使用 std :: for_each boost :: bind ,我试图将每个附加到XML对象(具体地,类型为 pugi :: xml_node )。

我有一个Decorator类。它包含接受对象(例如,Person类型)和pugi :: xml_node的函数,然后使用对象中的数据来填充pugi :: xml_node对象。

例如:

class Decorator
{
    public:
        decoratePersonNode(const Person &person, pugi::xml_node node);
        // ... many other functions
}

对于Person对象容器中的每个对象,我想将一个新节点附加到父节点,然后装饰'使用Person对象的新节点。

所以我有这样的事情:

pugi::xml_node parentNode("People");
for_each(people.begin(), people.end(), boost::bind(&Decorator::decoratePersonNode, m_decorator, _1, parentNode.append_child()));
然而,这是错误的。 parentNode.append_child()被调用一次,然后该对象作为每次调用decoratePersonNode()的参数传递。我想要的是每次迭代调用 parentNode.append_child()并将其传递给decoratePersonNode()。

我知道我可以修改decoratePersonNode()函数来接受 parent 节点作为参数,然后在其中调用append_child(),但我不想这样做。

我不想以任何方式修改decoratePersonNode()的参数:)

编辑:我也应该提到!我没有使用C ++ 11。

任何建议都会非常感谢!

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以将decoratPersonNode与其他functorlambda结合起来。它看起来像是:

for_each(people.begin(), people.end(), 
         [&parentNode, &m_decorator](const Person& person) {
             m_decorator.decoratePersonNode(person, parentNode.append_child());
         });