美文网首页
Boolan泛型编程第五周笔记

Boolan泛型编程第五周笔记

作者: Chuankuei | 来源:发表于2017-10-31 20:06 被阅读0次

    一.一个万用的Hash Fuction

    三种形式:

    1)设计成成员函数、

    #include

    class Customer{

    //........

    };

    class CustomerHash

    {

    public:

    std::size_t operator()(const Customer& c) const{

    return /*........*/;

    }

    };

    unordered_set customers;

    2)设计成一般函数、

    size_t customer_hash_func(const Customer& c)

    {

    return /*......*/;

    }

    3)以struct hash偏特化形式实现hash function。

    class MyString

    {

    private:

    char* _data;

    size_t _len;

    };

    namespace std;

    {

    template<>

    struct hash

    {

    size_t operatoe()(const MyString& s) const noexcept{

    return hash()(string(s.get()));

    }}}

    二、Tuple用例

    元之组合,数之组合。使用方法如下:

    通过继承的方法来不断地剔除第一个参数,最终来实现对每一个元素的操作。

    三、Type traits

    用traits来实现类型的筛选,回答class中的默认构造、拷贝构造、拷贝赋值、析构函数重要不重要,是否是POD等,为算法服务。

    对于自定义的类型,可以自己定义type traits的特化版本。

    1)is_void类模板,

    继承自_is_void_helper类模板,先把const、volatile属性拿掉,再传给__is_void_helper,利用它的泛化和特化void,判断是否是void;

    2)is_integral类模板,

    也是先把const、volatile属性拿掉,再利用__is_integral_helper的泛化和偏特化判断,如果不是和某种特化版本匹配的类型,那么就会使用泛化版本,泛化版本的回答是false;

    四、cout

    cout是一个iostream类的对象,它有一个成员运算符函数operator<<,每次调用的时候就会向输出设备输出内容;相当于重载了<<。

    五、moveable

    1、对vector的影响

    2、对list影响

    3、对deque影响

    4、对multiset影响

    5、对unordered_multiset影响

    使用move虽无法减少拷贝的次数,但是可以提高拷贝构造的效率;

    相关文章

      网友评论

          本文标题:Boolan泛型编程第五周笔记

          本文链接:https://www.haomeiwen.com/subject/jvcipxtx.html