以与数组相同的方式在映射上循环
loop on a map same way as array
我正试图以同样的方式在容器(map、set、vector、list)和数组上循环。这是代码:
template<typename TYPE>
void AddXmlOfContAttribute(TYPE *it)
{
m_ss<<"<SingleNode ";
AddXmlAttribute("Value" , *it);
m_ss<<"/>n";
}
template<typename TYPE1,typename TYPE2>
void AddXmlOfContAttribute(std::pair<TYPE1,TYPE2> tpair)
{
m_ss<<"<MapNode ";
AddXmlAttribute("key" , tpair->first);
AddXmlAttribute("Value" , tpair->second);
m_ss<<"/>n";
}
template<typename TYPE>
void AddContainerToXml(std::string str, TYPE it_begin , TYPE it_end)
{
if(it_begin != it_end)
{
m_ss<<"<"<<str<<">n";
//std::for_each(it_begin , it_end, AddXmlOfContAttribute);
for( ; it_begin != it_end ; it_begin++)
AddXmlOfContAttribute(it_begin);
m_ss<<"</"<<str<<">n";
}
}
我得到以下错误:
在成员函数"void AddElementToBackupFileFunctor::AddContainerToXml(CrString,TYPE,TYPE)[其中TYPE=std::_Rb_tree_const_iterator>]'从这里实例化错误:对
的调用没有匹配的函数AddElementToBackupFileFunctor::AddXmlOfContAttribute(std::_Rb_tree_const_iterator>&)'
如何在正常循环中进行?附加问题:如何在for_each循环中执行此操作?
因此,简而言之,我构建了一个示例,应该可以解释您在这里需要的所有内容。
为了完成您想要的操作,您必须首先将处理程序更改为具有静态方法的结构(这是必需的,因为您不能部分专门化函数模板,请参阅此处):
template<typename TYPE>
struct value_handler {
static void AddXmlOfContAttribute(AddElementToBackupFileFunctor& context,
TYPE value) {
// handle normal values here
// context replaces this-pointer
}
};
// partial specialization for pairs
template<typename TYPE1, typename TYPE2>
struct value_handler<std::pair<TYPE1, TYPE2> > {
static void AddXmlOfContAttribute(AddElementToBackupFileFunctor& context,
std::pair<TYPE1, TYPE2> value) {
// handle values that are pairs here
// context replaces this-pointer
}
};
value
-参数不能是引用,因为这会破坏std::bind1st
(此处介绍了使用Boost的解决方法)。要将其与std::for_each
一起使用,请执行以下操作:
std::for_each(begin, end, std::bind1st(
std::ptr_fun(&AddElementToBackupFileFunctor::value_handler<typename TYPE::value_type>::AddXmlOfContAttribute),
*this));
编译错误来自以下行:
AddXmlOfContAttribute(it_begin);
这应该是:
AddXmlOfContAttribute(*it_begin);
我是个白痴我没有意识到第一次超负荷。。。这应该是sc所说的参考。
相关文章:
- 在映射擦除c++期间执行循环的次数
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 映射中循环的迭代器
- 为什么这个 x 值在这个循环映射中没有增加?C++
- 在循环(C++)中用新指针填充映射
- c++ 在循环中删除迭代器(映射的映射)
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 映射基于自动的循环单元素访问C++
- 有没有办法在不使用循环的情况下非具体地引用映射中的每个值?C++
- 在 stl 映射和列表 (c++) 上进行迭代的泛型循环
- C++:分段函数,循环初始化为映射
- c++ 过期映射条目线程与事件循环
- 我如何将输入分配给在 for 循环中设置的映射功能
- 循环访问提升mapped_region/内存映射文件
- 复制地图<双精度,元组<双精度,双精度>>映射<双精度,双精度>没有循环?
- 在使用无序多映射实现的有向图中查找循环
- 循环访问映射并删除动态分配的元素
- 不带迭代程序的哈希映射循环
- 如何在映射向量中循环访问地图