日韩性视频-久久久蜜桃-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 | 亚洲欧美韩日 | 久久黄色片 | 婷婷九月综合 | 精品一区二区人妻 | 色婷婷综合久久久中文字幕 | 一区二区三区蜜桃 | 99久久99久久免费精品蜜臀 | 亚洲 欧美 激情 另类 校园 | 女人特黄大aaaaaa大片 | 四虎影院国产精品 | 粗大挺进潘金莲身体在线播放 | 爱爱免费视频网站 | 亚洲国产无线乱码在线观看 | 欧美高清hd19 | 91视频国产精品 | 亚洲人交配视频 | 欧美国产精品一区二区 | 中国av一区二区 | 99精品福利| 福利视频三区 | 午夜免费看视频 | h视频国产 | www.久久av.com | 亚洲乱码视频在线观看 | 国产日产精品一区二区三区 | 日本成人福利视频 | 麻豆免费在线观看 | 精品国偷自产国产一区 | av网站免费在线播放 | 天天狠狠干 | h片免费观看 | 黄色一级图片 | 一区高清| 视频在线不卡 | 国产一区二区三区在线观看视频 | 黄av在线 | 秋霞欧美一区二区三区视频免费 | 欧洲女女同性videoso | 欧美三日本三级少妇三99 | 免费二区 | 日韩中文字幕在线观看视频 | 蜜桃成熟时李丽珍在线观看 | 激情内射亚洲一区二区三区爱妻 | 亚洲av无码一区二区三区dv | 日本少妇毛茸茸 | 久久com | 亚洲区色 | 亚洲无人区码一码二码三码 | 欧美一区二区三区四区在线观看 | 久草久草 | 日韩高清一区二区 | brazzers欧美一区二区 | 国产一级精品视频 | av综合一区| 日本少妇全体裸体洗澡 | 亚洲国产免费 | 伊人伊人 | 色呦呦一区 | 欧美午夜精品一区二区三区电影 | 日本人视频69式jzzij | 高清毛片aaaaaaaaa片 | 风流老熟女一区二区三区 | 久久午夜精品人妻一区二区三区 | 57pao国产成永久免费视频 | 香蕉尹人 | 国产高清在线视频观看 | 男女啪啪国产 | 自拍毛片 | 中文字幕人妻一区二区 | 91精品国产综合久久久蜜臀九色 | 性色在线视频 | 色综合99 | 欧美精品一区二区免费看 | 97日韩精品 | 四虎影视免费永久观看在线 | 91手机视频在线观看 | 亚洲第一激情 | 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 久久精品国产亚洲AV高清综合 | 亚洲字幕av一区二区三区四区 | av日韩国产 | 无码人妻久久一区二区三区不卡 | 日韩免费在线视频观看 | 午夜88| 丝袜 亚洲 另类 欧美 重口 | 欧美亚洲精品一区二区 | 亚洲无限观看 | 国产精品日日做人人爱 | 国产1区在线观看 | 青青草在线观看视频 | 五月天婷婷导航 | 日韩怡春院 | 日韩一级理论片 |