boost::绑定动态参数
boost::bind with dynamic argument?
我有一个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()函数以接受父节点作为参数,然后在中调用append_child(),但我不想这样做。
我不想以任何方式修改decoratePersonNode()的参数:)
编辑:我也应该提到!我没有使用C++11。
任何建议都将不胜感激!
谢谢,
Ben
您可以用另一个functor
或lambda
包装decoratPersonNode
。它看起来像:
for_each(people.begin(), people.end(),
[&parentNode, &m_decorator](const Person& person) {
m_decorator.decoratePersonNode(person, parentNode.append_child());
});
相关文章:
- C++基于输入参数的动态代码生成
- 我可以动态创建新地图并作为函数参数传递吗?
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 将数组动态分配到具有指针参数的函数中
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- 传递给函数的模板化参数的动态大小数组
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 动态构建模板参数包
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- 动态创建和扩展STD ::元组为参数包
- 如何在不动态铸造的情况下使用派生的参数
- 如何动态执行具有任意参数类型的函数指针
- 在C 中解开包装的类似Python的动态参数
- 将动态创建的数组作为参数传递
- 如何使用一些参数初始化动态分配的数组中的对象
- 为 C 绑定创建动态以 null 结尾的参数
- C++ CPP 使用参数动态调用 DLL
- 用CPP中的参数动态调用外部DLL