久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

<tfoot id='hZS9D'></tfoot>

        <legend id='hZS9D'><style id='hZS9D'><dir id='hZS9D'><q id='hZS9D'></q></dir></style></legend>
        <i id='hZS9D'><tr id='hZS9D'><dt id='hZS9D'><q id='hZS9D'><span id='hZS9D'><b id='hZS9D'><form id='hZS9D'><ins id='hZS9D'></ins><ul id='hZS9D'></ul><sub id='hZS9D'></sub></form><legend id='hZS9D'></legend><bdo id='hZS9D'><pre id='hZS9D'><center id='hZS9D'></center></pre></bdo></b><th id='hZS9D'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='hZS9D'><tfoot id='hZS9D'></tfoot><dl id='hZS9D'><fieldset id='hZS9D'></fieldset></dl></div>
        • <bdo id='hZS9D'></bdo><ul id='hZS9D'></ul>

        <small id='hZS9D'></small><noframes id='hZS9D'>

      1. std::enable_if 如何工作?

        How Does std::enable_if work?(std::enable_if 如何工作?)

          <tbody id='XwY5K'></tbody>
          <i id='XwY5K'><tr id='XwY5K'><dt id='XwY5K'><q id='XwY5K'><span id='XwY5K'><b id='XwY5K'><form id='XwY5K'><ins id='XwY5K'></ins><ul id='XwY5K'></ul><sub id='XwY5K'></sub></form><legend id='XwY5K'></legend><bdo id='XwY5K'><pre id='XwY5K'><center id='XwY5K'></center></pre></bdo></b><th id='XwY5K'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='XwY5K'><tfoot id='XwY5K'></tfoot><dl id='XwY5K'><fieldset id='XwY5K'></fieldset></dl></div>
          <tfoot id='XwY5K'></tfoot>

            • <bdo id='XwY5K'></bdo><ul id='XwY5K'></ul>

              1. <legend id='XwY5K'><style id='XwY5K'><dir id='XwY5K'><q id='XwY5K'></q></dir></style></legend>
                1. <small id='XwY5K'></small><noframes id='XwY5K'>

                  本文介紹了std::enable_if 如何工作?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  我剛剛問了這個問題:std::numeric_limits 作為條件

                  我了解 std::enable_if 將有條件地定義方法的返回類型導致方法編譯失敗的用法.

                  template類型名稱 std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar);}

                  我不明白的是第二個參數和對 std::enable_if 的看似毫無意義的賦值,當它被聲明為模板語句的一部分時,如 Rapptz answer.

                  template::value, int>::type = 0>void foo(const T& bar) { isInt();}

                  解決方案

                  正如 40two 在評論中提到的,理解替換失敗不是錯誤是理解的先決條件std::enable_if.

                  std::enable_if 是一個專門的模板,定義為:

                  template結構 enable_if {};模板struct enable_if{ typedef T 類型;};

                  這里的關鍵在于typedef T type僅在bool Condtrue時才定義.

                  現在有了對 std::enable_if 的理解,很明顯 void foo(const T &bar) { isInt(bar);} 定義為:

                  template類型名稱 std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar);}

                  如firda 的答案所述,= 0 是第二個模板的默認值范圍.template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0> 中默認的原因是兩個選項都可以用 foo<調用int >( 1 );.如果 std::enable_if 模板參數沒有被默認,調用 foo 將需要兩個模板參數,而不僅僅是 int.

                  <小時>

                  一般注意,通過明確輸入 typename std::enable_if::is_integer, void>::typevoidstd::enable_if 的默認第二個參數,如果你有 c++14 enable_if_t 是一個定義的類型,應該使用.所以返回類型應該壓縮為:std::enable_if_t::is_integer>

                  給 visual- 的用戶的特別說明-工作室 visual-studio-2013:不支持默認模板參數,因此您只能在函數返回時使用 enable_if:std::numeric_limits 作為條件

                  I just asked this question: std::numeric_limits as a Condition

                  I understand the usage where std::enable_if will define the return type of a method conditionally causing the method to fail to compile.

                  template<typename T>
                  typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
                  

                  What I don't understand is the second argument and the seemingly meaningless assignment to std::enable_if when it's declared as part of the template statement, as in Rapptz answer.

                  template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
                  void foo(const T& bar) { isInt(); }
                  

                  解決方案

                  As is mentioned in comment by 40two, understanding of Substitution Failure Is Not An Error is a prerequisite for understanding std::enable_if.

                  std::enable_if is a specialized template defined as:

                  template<bool Cond, class T = void> struct enable_if {};
                  template<class T> struct enable_if<true, T> { typedef T type; };
                  

                  The key here is in the fact that typedef T type is only defined when bool Cond is true.

                  Now armed with that understanding of std::enable_if it's clear that void foo(const T &bar) { isInt(bar); } is defined by:

                  template<typename T>
                  typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
                  

                  As mentioned in firda's answer, the = 0 is a defaulting of the second template parameter. The reason for the defaulting in template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0> is so that both options can be called with foo< int >( 1 );. If the std::enable_if template parameter was not defaulted, calling foo would require two template parameters, not just the int.


                  General note, this answer is made clearer by explicitly typing out typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type but void is the default second parameter to std::enable_if, and if you have c++14 enable_if_t is a defined type and should be used. So the return type should condense to: std::enable_if_t<std::numeric_limits<T>::is_integer>

                  A special note for users of visual-studio prior to visual-studio-2013: Default template parameters aren't supported, so you'll only be able to use the enable_if on the function return: std::numeric_limits as a Condition

                  這篇關于std::enable_if 如何工作?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  Why do two functions have the same address?(為什么兩個函數的地址相同?)
                  Why the initializer of std::function has to be CopyConstructible?(為什么 std::function 的初始化程序必須是可復制構造的?)
                  mixing templates with polymorphism(混合模板與多態性)
                  When should I use the keyword quot;typenamequot; when using templates(我什么時候應該使用關鍵字“typename?使用模板時)
                  Dependent name resolution amp; namespace std / Standard Library(依賴名稱解析命名空間 std/標準庫)
                  gcc can compile a variadic template while clang cannot(gcc 可以編譯可變參數模板,而 clang 不能)

                        <tbody id='pdBSx'></tbody>

                      <tfoot id='pdBSx'></tfoot>
                      <i id='pdBSx'><tr id='pdBSx'><dt id='pdBSx'><q id='pdBSx'><span id='pdBSx'><b id='pdBSx'><form id='pdBSx'><ins id='pdBSx'></ins><ul id='pdBSx'></ul><sub id='pdBSx'></sub></form><legend id='pdBSx'></legend><bdo id='pdBSx'><pre id='pdBSx'><center id='pdBSx'></center></pre></bdo></b><th id='pdBSx'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='pdBSx'><tfoot id='pdBSx'></tfoot><dl id='pdBSx'><fieldset id='pdBSx'></fieldset></dl></div>

                      <small id='pdBSx'></small><noframes id='pdBSx'>

                        • <bdo id='pdBSx'></bdo><ul id='pdBSx'></ul>

                            <legend id='pdBSx'><style id='pdBSx'><dir id='pdBSx'><q id='pdBSx'></q></dir></style></legend>
                            主站蜘蛛池模板: 久久国产精品久久国产精品 | 久久综合久色欧美综合狠狠 | 青青草一区二区三区 | 久久久久国产精品一区二区 | 鸡毛片| 日韩av成人 | 国产精品一区二区不卡 | a国产一区二区免费入口 | 国产精品三级久久久久久电影 | 久久草在线视频 | 国产在线视频一区二区董小宛性色 | 欧美在线一区二区三区 | 自拍偷拍第一页 | 久久精品视频91 | 成人午夜视频在线观看 | 亚洲免费在线观看 | 国产日韩免费视频 | 91麻豆精品国产91久久久更新资源速度超快 | 九色国产 | 欧美视频成人 | 久久精品久久精品 | 精品国产一区二区国模嫣然 | 国产伦精品一区二区三区在线 | 一区二区在线不卡 | 午夜不卡福利视频 | 欧美一级黄视频 | 精品欧美激情在线观看 | 成人深夜福利 | 二区不卡 | 在线免费观看毛片 | 欧美一级一 | 久久a久久 | 少妇特黄a一区二区三区88av | 农夫在线精品视频免费观看 | 久久精品国产免费高清 | 99精品国产一区二区青青牛奶 | 国产羞羞视频在线观看 | 人操人免费视频 | 国产一区二区三区在线 | 午夜精品视频在线观看 | 超黄视频网站 |