zoukankan      html  css  js  c++  java
  • c++ 使用模板按类型统计stl多维容器中元素的数量

    struct ItemCounter
    {
    template<typename T1, typename T2, typename = typename std::enable_if<!std::is_same<T1, typename T2::value_type::second_type>::value>::type>
    static typename T2::value_type::second_type::size_type Count(const T2 &container) {
    typename T2::value_type::second_type::size_type ret = 0;
    for (const auto &item : container) {
    ret += ItemCounter::Count<T1>(item.second);
    }
    return ret;
    }
    template<typename T1, typename T2, typename = typename std::enable_if<!std::is_same<T1, typename T2::value_type>::value>::type>
    static typename T2::value_type::size_type Count(const T2 &container) {
    typename T2::value_type::size_type ret = 0;
    for (const auto &item : container) {
    ret += ItemCounter::Count<T1>(item);
    }
    return ret;
    }
    template<typename T1, typename T2, typename = typename std::enable_if<std::is_same<T1, typename T2::value_type>::value>::type>
    static typename T2::size_type Count(const T2 &container)
    {
    return container.size();
    }
    template<typename T1, typename T2, typename = typename T2::value_type::second_type, typename = typename std::enable_if<std::is_same<T1, typename T2::value_type::second_type>::value>::type>
    static typename T2::size_type Count(const T2 &container)
    {
    return container.size();
    }
    };

    template<typename T, typename TContainer>
    size_t ItemCount(const TContainer &container)
    {
    return ItemCounter::Count<T>(container);
    }

    代码重构时会方便很多,支持value_type为T和pair<X,T>类型的容器

    例如原来:

    std::vector<A> arr;

    size_t sz = arr.size();

    重构后:

    std::map<std::string, std::vector<A> > mapped_arr;

    size_t sz = ItemCount<A>(mapped_arr);

  • 相关阅读:
    存储过程分页,前台应用范例repeater分页
    引用真正分页控件(与存储过程联合使用)页面
    分页存储过程repeater分页
    查找DetailsView1数据控件中的数据
    c#读取文件
    SQL触发器实例讲解
    TreeView节点选中问题
    C# 实现版本自动更新
    .Net那点事儿系列:C#操作Xml:通过XmlDocument读写Xml文档
    Linq学习笔记
  • 原文地址:https://www.cnblogs.com/niukuo/p/8325716.html
Copyright © 2011-2022 走看看