精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++17引入的一個(gè)新特性void_t簡(jiǎn)析

C語(yǔ)言編程 ? 來(lái)源:程序喵大人 ? 2023-03-06 09:37 ? 次閱讀

最近發(fā)現(xiàn)了一個(gè)有意思的特性:void_t。

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

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

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

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

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


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

比如判斷是否有某個(gè)成員:

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


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

比如判斷某個(gè)類是否可迭代:

template 
constexpr bool is_iterable{};


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

比如判斷某個(gè)類是否有某個(gè)函數(shù):

template 
struct has_hello_func : std::false_type {};


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

測(cè)試結(jié)果:

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
}

它的原理其實(shí)就是利用SFINAE和模板優(yōu)先找特化去匹配的特性,估計(jì)大家應(yīng)該看示例代碼就能明白。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1618

    瀏覽量

    49052
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6971

原文標(biāo)題:C++17一個(gè)很冷門很有意思的新特性

文章出處:【微信號(hào):C語(yǔ)言編程,微信公眾號(hào):C語(yǔ)言編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新能源電池產(chǎn)業(yè)鏈及投資機(jī)會(huì)簡(jiǎn)-磷酸亞鐵鋰

    新能源電池產(chǎn)業(yè)鏈及投資機(jī)會(huì)簡(jiǎn)-磷酸亞鐵鋰  、前言
    發(fā)表于 12-25 09:34 ?976次閱讀

    35個(gè)GUI的例子,由簡(jiǎn)

    35個(gè)GUI的例子,由簡(jiǎn)繁35個(gè)GUI的例子,由簡(jiǎn)繁,文件里有例子說(shuō)明以及使用幫助
    發(fā)表于 06-17 18:30

    【設(shè)計(jì)技巧】rtos的核心原理簡(jiǎn)

    rtos的核心原理簡(jiǎn)rtos全稱real-time operating system(實(shí)時(shí)操作系統(tǒng)),我來(lái)簡(jiǎn)單分析下:我們都知道,c語(yǔ)句中調(diào)用個(gè)
    發(fā)表于 07-23 08:00

    buck電路和引入電感簡(jiǎn)

    buck電路和引入電感
    發(fā)表于 12-29 08:11

    OpenHarmony智慧設(shè)備開(kāi)發(fā)-芯片模組簡(jiǎn)T507

    降噪,自動(dòng)調(diào)色系統(tǒng)和梯形校正模塊可以提供提供流暢的用戶體驗(yàn)和專業(yè)的視覺(jué)效果。 典型應(yīng)用場(chǎng)景: 工業(yè)控制、智能駕艙、智慧家居、智慧電力、在線教育等。 、*附件:OpenHarmony智慧設(shè)備開(kāi)發(fā)-芯片模組簡(jiǎn)T507.docx
    發(fā)表于 05-11 16:34

    PCB線路板電鍍銅工藝簡(jiǎn)

    PCB線路板電鍍銅工藝簡(jiǎn)   .電鍍工藝的分類:   酸性光亮銅電鍍電鍍鎳/金電鍍錫   二.工藝流程:
    發(fā)表于 11-17 14:01 ?4001次閱讀

    EPON技術(shù)簡(jiǎn)

    EPON技術(shù)簡(jiǎn) EPON是個(gè)新技術(shù),用于保證提供個(gè)高品質(zhì)與高帶寬利用率的應(yīng)用。   
    發(fā)表于 01-22 10:43 ?855次閱讀

    鼠標(biāo)HID例程(中)簡(jiǎn)

    鼠標(biāo) HID 例程簡(jiǎn) 緊接《鼠標(biāo) HID 例程簡(jiǎn)(上)》文,繼續(xù)向大家介紹鼠 標(biāo) HID 例程的未完的內(nèi)容。
    發(fā)表于 07-26 15:18 ?0次下載

    C++17 STL標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)教材電子書免費(fèi)下載

    C++11,C++14和C++17標(biāo)準(zhǔn)為C++添加了許多新特性。當(dāng)前的C++已經(jīng)和10年前的
    發(fā)表于 02-28 08:00 ?7次下載
    <b class='flag-5'>C++17</b> STL標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)教材電子書免費(fèi)下載

    5G AAU 功放控制和監(jiān)測(cè)模塊簡(jiǎn)

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

    c++入門后如何進(jìn)階

    C++11 是下一個(gè) C++ 標(biāo)準(zhǔn),但我們通常稱之為現(xiàn)代 C++。現(xiàn)代 C++ 也包括了 C++
    發(fā)表于 07-21 08:56 ?326次閱讀
    <b class='flag-5'>c</b>++入門后如何進(jìn)階

    a17和a16的參數(shù)區(qū)別

    哪些重要的區(qū)別呢?本文將一一探討。 1. 內(nèi)核改進(jìn) C++17引入些內(nèi)核改進(jìn),其中最顯著的是對(duì)字符串的內(nèi)存使用的優(yōu)化。在C++16的版中,字符串引用傳遞時(shí),會(huì)發(fā)生大量的無(wú)效副本拷貝
    的頭像 發(fā)表于 08-16 11:47 ?1195次閱讀

    AFE8092幀同步特性簡(jiǎn)

    AFE8092幀同步特性簡(jiǎn)
    的頭像 發(fā)表于 08-24 13:37 ?628次閱讀
    AFE8092幀同步<b class='flag-5'>特性</b><b class='flag-5'>簡(jiǎn)</b><b class='flag-5'>析</b>

    C++ invoke與function的區(qū)別在哪?

    invoke是C++17標(biāo)準(zhǔn)引入個(gè)函數(shù)模板,用來(lái)調(diào)用可調(diào)用對(duì)象(Callable Object,如函數(shù)指針、函數(shù)對(duì)象、成員函數(shù)指針等)并返回結(jié)果。
    的頭像 發(fā)表于 09-04 09:11 ?796次閱讀
    <b class='flag-5'>C</b>++ invoke與function的區(qū)別在哪?

    藍(lán)牙5.4的幾個(gè)新特性

    前述文章《藍(lán)牙5.4引入PAwR,電子價(jià)簽迎來(lái)新機(jī)遇》中我們介紹了藍(lán)牙5.4的PAwR特性,該特性引入使得電子價(jià)簽領(lǐng)域迎來(lái)了新的機(jī)遇,但其實(shí)藍(lán)牙5.4
    的頭像 發(fā)表于 10-26 17:18 ?3691次閱讀
    藍(lán)牙5.4的幾個(gè)新<b class='flag-5'>特性</b>