• 类型萃取(type traits)


    1. 类型萃取的作用

    类型萃取使用模板技术来萃取类型(包含自定义类型和内置类型)的某些特性,用以判断该类型是否含有某些特性,从而在泛型算法中来对该类型进行特殊的处理用来提高效率或者其他。例如:在STL中的destory算法根据函数的参数类型的特性:是否有trivial destructor来选择对应的策略来进行destory,如果为内置类型,则不调用该类型的destructor,否则对迭代器范围内的对象调用destructor来进行destory。


    2. 函数派送

    在STL中使用类型萃取能提供一种根据类型的某些属性在编译时期进行函数派送的机制。


    例如:泛型函数destroy

    template <typename ForwardIterator>
    inline void destory(ForwardIterator first, ForwardIterator last)
    {
        __destory(first, last, value_type(first));    
    }
    
    template <typename ForwardIterator, typename T>
    inline void __destory(ForwardIterator first, ForwardIterator last, T* )
    {
        typedef typename type_traits<T>::has_trivial_destructor trivial_destructor;
        __destory_aux(first, last, trivial_destructor());
    }
    
    template <typename ForwardIterator>
    inline void __destory_aux(ForwardIterator first, ForeardIterator last, __false_type);
    
    template <typename ForwardIterator>
    inline void __destory_aux(ForwardIterator first, ForeardIterator last, __true_type);

    在最上层的destory函数通过value_type全局函数来对迭代器萃取迭代器所指向的对象的类型,然后调用__destory,该函数通过类型萃取来判断该类型是否含有trivial destructor来在编译时期进行函数派送。函数派送机制通过模板的编译机制和模板函数的重载来避免在函数代码使用if和else语句或者switch来判断是否有trivial destructor从而进行函数派送,避免了效率损失和代码的混乱。

     

    3.SGI-STL中type traits可以萃取的类型属性

    在SGI-STL中,可以萃取的类型属性如下:

    1: has_trivial_default_constructor
    2: has_trivial_copy_constructor
    3: has_trivial_assignment_operator
    4: has_trivial_destructor
    5: is_POD_type

     

  • 相关阅读:
    20201215王馨瑶 实验一《Python程序设计》实验报告
    20201215第十六周学习总结
    python笔记
    信导笔记
    成绩调节
    2020-2021-1 20201226 《信息安全专业导论》第十三周学习总结
    链表(补交)
    2020-2021-1 20201226 《信息安全专业导论》第十二周学习总结
    Wireshark 实践
    ssh
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4791305.html
Copyright © 2020-2023  润新知