在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++17引入的一個新特性void_t簡析

C語言編程 ? 來源:程序喵大人 ? 2023-03-06 09:37 ? 次閱讀

最近發現了一個有意思的特性:void_t。

void_t是C++17引入的一個新特性,它的定義很簡單(有些編譯器的實現可能不是這樣,但也大體類似):

template< class... >
using void_t = void;

看著它很簡單,但它搭配SFINAE卻可以在模板元編程中發揮巨大作用。

比如在編譯期判斷類是否有某個類型using:

template >
struct has_type : std::false_type {};


template 
struct has_type> : std::true_type {};

比如判斷是否有某個成員:

template >
struct has_a_member : std::false_type {};


template 
struct has_a_member().a)>> : std::true_type {};

比如判斷某個類是否可迭代:

template 
constexpr bool is_iterable{};


template 
constexpr bool is_iterable().begin()), decltype(std::declval().end())>> = true;

比如判斷某個類是否有某個函數:

template 
struct has_hello_func : std::false_type {};


template 
struct has_hello_func().hello())>> : std::true_type {};

測試結果:

struct HasType {
  typedef int type;
};
struct NHasType {
  int hello;
};


struct Hasa {
  int a;
};
struct NHasa {
  int b;
};


struct HasHello {
  void hello();
};
struct NoHasHello {};


int main() {
  std::cout << has_type::value << '
';   // 1
  std::cout << has_type::value << '
';  // 0


  std::cout << has_a_member::value << '
';   // 1
  std::cout << has_a_member::value << '
';  // 0


  std::cout << has_hello_func::value << '
';    // 1
  std::cout << has_hello_func::value << '
';  // 0


  std::cout << is_iterable> << '
';  // 1
  std::cout << is_iterable << '
';               // 0
}

它的原理其實就是利用SFINAE和模板優先找特化去匹配的特性,估計大家應該看示例代碼就能明白。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編譯器
    +關注

    關注

    1

    文章

    1636

    瀏覽量

    49172
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7008

原文標題:C++17一個很冷門很有意思的新特性

文章出處:【微信號:C語言編程,微信公眾號:C語言編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    新能源電池產業鏈及投資機會-磷酸亞鐵鋰

    新能源電池產業鏈及投資機會-磷酸亞鐵鋰  、前言
    發表于 12-25 09:34 ?993次閱讀

    35GUI的例子,由

    35GUI的例子,由繁35GUI的例子,由繁,文件里有例子說明以及使用幫助
    發表于 06-17 18:30

    【設計技巧】rtos的核心原理

    rtos的核心原理rtos全稱real-time operating system(實時操作系統),我來簡單分析下:我們都知道,c語句中調用
    發表于 07-23 08:00

    OpenHarmony智慧設備開發-芯片模組T507

    降噪,自動調色系統和梯形校正模塊可以提供提供流暢的用戶體驗和專業的視覺效果。 典型應用場景: 工業控制、智能駕艙、智慧家居、智慧電力、在線教育等。 、*附件:OpenHarmony智慧設備開發-芯片模組T507.docx
    發表于 05-11 16:34

    PCB線路板電鍍銅工藝

    PCB線路板電鍍銅工藝   .電鍍工藝的分類:   酸性光亮銅電鍍電鍍鎳/金電鍍錫   二.工藝流程:
    發表于 11-17 14:01 ?4038次閱讀

    EPON技術

    EPON技術 EPON是新技術,用于保證提供高品質與高帶寬利用率的應用。   
    發表于 01-22 10:43 ?872次閱讀

    鼠標HID例程(中)

    鼠標 HID 例程 緊接《鼠標 HID 例程(上)》文,繼續向大家介紹鼠 標 HID 例程的未完的內容。
    發表于 07-26 15:18 ?0次下載

    C++17 STL標準庫學習教材電子書免費下載

    C++11,C++14和C++17標準為C++添加了許多新特性。當前的C++已經和10年前的
    發表于 02-28 08:00 ?7次下載
    <b class='flag-5'>C++17</b> STL標準庫學習教材電子書免費下載

    5G AAU 功放控制和監測模塊

    5G AAU 功放控制和監測模塊
    發表于 10-28 12:00 ?2次下載
    5G AAU 功放控制和監測模塊<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    如何理解C++中的void

    首先void*中的void代表任意的數據類型,"星號"代表指針,所以其就是
    的頭像 發表于 03-30 15:01 ?4240次閱讀
    如何理解<b class='flag-5'>C</b>++中的<b class='flag-5'>void</b>?

    c++入門后如何進階

    C++11 是下一個 C++ 標準,但我們通常稱之為現代 C++。現代 C++ 也包括了 C++
    發表于 07-21 08:56 ?350次閱讀
    <b class='flag-5'>c</b>++入門后如何進階

    a17和a16的參數區別

    哪些重要的區別呢?本文將一一探討。 1. 內核改進 C++17引入些內核改進,其中最顯著的是對字符串的內存使用的優化。在C++16的版中,字符串引用傳遞時,會發生大量的無效副本拷貝
    的頭像 發表于 08-16 11:47 ?1251次閱讀

    AFE8092幀同步特性

    AFE8092幀同步特性
    的頭像 發表于 08-24 13:37 ?667次閱讀
    AFE8092幀同步<b class='flag-5'>特性</b><b class='flag-5'>簡</b><b class='flag-5'>析</b>

    C++ invoke與function的區別在哪?

    invoke是C++17標準引入函數模板,用來調用可調用對象(Callable Object,如函數指針、函數對象、成員函數指針等)并返回結果。
    的頭像 發表于 09-04 09:11 ?843次閱讀
    <b class='flag-5'>C</b>++ invoke與function的區別在哪?

    藍牙5.4的幾個新特性

    前述文章《藍牙5.4引入PAwR,電子價簽迎來新機遇》中我們介紹了藍牙5.4的PAwR特性,該特性引入使得電子價簽領域迎來了新的機遇,但其實藍牙5.4
    的頭像 發表于 10-26 17:18 ?3859次閱讀
    藍牙5.4的幾個新<b class='flag-5'>特性</b>
    主站蜘蛛池模板: 国产精品免费看久久久久| 五月婷婷欧美| 亚洲88av| 日本wwwxx| 国产精品毛片天天看片| 亚洲人成网站色7799在线观看| a一级黄| 国产精品夜色7777青苹果| jzzjlzz亚洲乱熟在线播放| 轻点灬大ji巴太粗太长了啊h| 经典三级第一页| 精品人人| a级黄视频| 欧美日韩影院| 婷婷亚洲五月琪琪综合| 午夜精品久久久久久久第一页 | 嫩草黄色影院| 国产亚洲第一伦理第一区| 夜夜操狠狠操| 国产精品九九热| 日本欧美一区二区三区免费不卡| 月夜免费观看完整视频| 天堂资源www天堂在线| 欧美伊人久久综合网| 国产成人一区二区三中文| 天天伊人网| 性欧美高清极品xx| www.一区二区| 日本黄色大片免费观看| 国产乱码免费卡1卡二卡3卡四| 亚洲精品午夜视频| zzji国产精品视频| 蝌蚪自拍网二区| 色www视频永久免费软件| 国外精品视频在线观看免费| 午夜国产精品久久影院| 99精品福利| 曰本三级香港三级人妇99视频| 日本色www| 永久影视| 男操女视频网站|