【发布时间】:2015-11-13 03:47:58
【问题描述】:
我有一个 Person 对象的容器。使用 std::for_each 和 boost::bind,我试图将每一个附加到一个 XML 对象(具体来说,类型为 pugi::xml_node强>)。
我有一个装饰器类。它包含接收对象(例如,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。
任何建议将不胜感激!
谢谢,
本
【问题讨论】:
-
使用像 for_each 这样简单的算法,显式循环将比绑定容易得多。