日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C/Cpp / STL / 类型萃取

發(fā)布時間:2024/10/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/Cpp / STL / 类型萃取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作用

類型萃取使用模板技術(shù)來萃取類型(包含自定義類型和內(nèi)置類型)的某些特性,用以判斷該類型是否含有某些特性,從而在泛型算法中來對該類型進(jìn)行特殊的處理用來達(dá)到提高效率或者其他的目的。

類型萃取的實現(xiàn)的基石是模板的偏特化和全特化,詳解鏈接:https://blog.csdn.net/itworld123/article/details/104718336?。

實例說明

這里采用的實例是 STL 的 destroy() 函數(shù)的實現(xiàn),原型如下圖所示:(stl_contruct.h)

該函數(shù)的作用是析構(gòu)?[ first , last ) 范圍內(nèi)的對象。

這里面就有個問題,ForwardIterator 是否是類對象,如果是的話就可以執(zhí)行其析構(gòu)函數(shù),否則是不進(jìn)行任何處理的。現(xiàn)在的關(guān)鍵就是怎么才知道?ForwardIterator?的數(shù)據(jù)類型是屬于哪一類呢?

為了解決上述問題,這里面就需要使用類型萃取技術(shù)了。

首先我們通過 value_type(first) 獲取到了模板的數(shù)據(jù)類型。進(jìn)入 __destroy() 函數(shù),如下所示:(stl_contruct.h)

好的,關(guān)鍵時刻來了!trivial_destructor 就決定了類型 T 是否含有析構(gòu)函數(shù)!它是如何被聲明的呢?這里需要看下?__type_traits<T> 的代碼,如下所示:(type_traits.h)

struct __true_type { };struct __false_type { };template <class type> struct __type_traits {typedef __false_type has_trivial_default_constructor;typedef __false_type has_trivial_copy_constructor;typedef __false_type has_trivial_assignment_operator;typedef __false_type has_trivial_destructor;typedef __false_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<char> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<signed char> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<unsigned char> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<short> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<unsigned short> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<int> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<unsigned int> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<long> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<unsigned long> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<float> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<double> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };__STL_TEMPLATE_NULL struct __type_traits<long double> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };template <class T> struct __type_traits<T*> {typedef __true_type has_trivial_default_constructor;typedef __true_type has_trivial_copy_constructor;typedef __true_type has_trivial_assignment_operator;typedef __true_type has_trivial_destructor;typedef __true_type is_POD_type; };

上述代碼中充斥著?__type_traits 的原生版本、偏特化版本以及全特化版本,也就是說,STL采用窮舉的方案,解決了如何判斷各種數(shù)據(jù)類型是否有析構(gòu)函數(shù)的問題。

若?has_trivial_destructor =?__true_type,則類型 T 不是類類型,所以不需要進(jìn)行析構(gòu),執(zhí)行代碼如下:(stl_contruct.h)

若?has_trivial_destructor =?__false_type,則類型 T 是類類型,所以需要進(jìn)行析構(gòu),執(zhí)行代碼如下:(stl_contruct.h)

這樣就完成了 destroy() 函數(shù)的功能。

?

參考:https://blog.csdn.net/dawn_sf/article/details/70038126

(SAW:Game Over!)

總結(jié)

以上是生活随笔為你收集整理的C/Cpp / STL / 类型萃取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕av高清片 | 成人精品在线视频 | 天天干人人干 | 我看黄色一级片 | 日本91在线 | 97国产精品久久久 | av手机免费看| 办公室大战高跟丝袜秘书经理ol | 国产尻逼 | 中文字幕a√ | 国产不卡一区二区视频 | 国产又爽又猛又粗的视频a片 | 亚洲啊v在线 | 韩国一级淫一片免费放 | 日韩精品电影网 | 国产在线无码精品 | 欧美aaaaaaa | av色资源 | 久中文字幕 | av色噜噜| 欧美日韩在线视频一区二区三区 | 久久国产精品免费看 | 国产 日韩 欧美在线 | 99蜜桃臀久久久欧美精品网站 | 亚洲夜夜操 | 超碰人人99 | 人人九九精品 | av永久 | 成人网导航 | 免费日皮视频 | 欧美日本亚洲韩国国产 | 丝袜一区二区三区 | 亚洲欧美在线观看 | 性史性dvd影片农村毛片 | 免费观看成人毛片 | 高清三区 | 国产女教师bbwbbwbbw | 超碰免费人人 | 久久这里| 天天插综合网 | 亚洲精品在线中文字幕 | 手机在线一区二区 | 国产精品久久久久久久久晋中 | 日日天天 | 国产日韩免费视频 | 91综合视频 | 两个人看的www视频免费完整版 | 亚洲v日韩v综合v精品v | 欧美一级黄视频 | 伊人亚洲影院 | 中文字幕亚洲精品在线 | 精品国产a线一区二区三区东京热 | 一级特黄bbbbb免费观看 | 日韩色av| 亚欧在线免费观看 | 成人一区二区三区在线 | 成人免费无码大片a毛片抽搐色欲 | 国产av 一区二区三区 | 伊人久久影院 | 久久久一级片 | 天天干天天舔 | 香蕉网站在线观看 | 日本不卡视频在线播放 | 亚洲免费高清视频 | 国产欧美精品一区二区 | 欧美亚洲国产一区二区三区 | 无码人妻丰满熟妇区96 | 西西人体高清44rt·net | 91视频h | 先锋资源久久 | 在线播放黄色av | 在线观看视频色 | 一区二区传媒有限公司 | www.亚洲一区二区 | 一二区视频| 一区二区精 | 国产精品日韩专区 | 亚洲天堂123 | 狼人伊人av | 美女久久久久久久久久 | 尹人成人| 国产91精品看黄网站在线观看 | 国产第一页在线 | 亚洲三区视频 | 日韩精品无码一区二区 | 性折磨bdsm欧美激情另类 | 青草99 | 日韩高清av在线 | av在线播放地址 | 99久久99久久精品国产片果冻 | 老色鬼av | 影音先锋黑人 | 日日草夜夜操 | 双性尿奴穿贞c带憋尿 | 国产激情对白 | 日韩污视频在线观看 | 欧美色性视频 | 国产精品theporn88 | 亚洲欧美日韩国产精品 |