我有一个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。
任何建议都会非常感谢!
谢谢,
本
答案 0 :(得分:0)
您可以将decoratPersonNode
与其他functor
或lambda
结合起来。它看起来像是:
for_each(people.begin(), people.end(),
[&parentNode, &m_decorator](const Person& person) {
m_decorator.decoratePersonNode(person, parentNode.append_child());
});