<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C++核心準(zhǔn)則C.138:使用using為派生類生成重載函數(shù)集合?

          0c7ff733eee5c64fd753f4c12952fce3.webp

          C.138: Create an overload set for a derived class and its bases with?using

          C.138:使用using為派生類生成重載函數(shù)集合?

          aecec1b431414f7157c1985aa6c6763a.webp


          48fac5cc4c3fe529844e326c6640f4d1.webp

          Reason(原因)

          48fac5cc4c3fe529844e326c6640f4d1.webp


          Without a using declaration, member functions in the derived class hide the entire inherited overload sets.

          如果不使用using聲明,派生類中的成員函數(shù)會隱藏整個繼承來的

          重載函數(shù)集合。


          48fac5cc4c3fe529844e326c6640f4d1.webp

          Example, bad(反面示例)

          48fac5cc4c3fe529844e326c6640f4d1.webp


          #include?
          class?B?{
          public:
          ????virtual?int?f(int?i)?{
          ????????std::cout?<????}
          ????virtual?double?f(double?d)?{
          ????????std::cout?<????}
          ????virtual?~B()?=?default;
          };

          class?D:?public?B?{
          public:
          ????int?f(int?i)?override?
          ????{
          ????????std::cout?<????}
          };

          int?main()
          {
          ????D?d;
          ????std::cout?<????std::cout?<}

          48fac5cc4c3fe529844e326c6640f4d1.webp

          Example, good(范例)

          48fac5cc4c3fe529844e326c6640f4d1.webp

          class?D:?public?B?{
          public:
          ????int?f(int?i)?override?
          ????{
          ????????std::cout?<????}
          ????using?B::f;?//?exposes?f(double)
          };
          48fac5cc4c3fe529844e326c6640f4d1.webp

          Note(注意)

          48fac5cc4c3fe529844e326c6640f4d1.webp

          This issue affects both virtual and nonvirtual member functions

          For variadic bases, C++17 introduced a variadic form of the using-declaration,

          本條款對虛函數(shù)和非虛函數(shù)都有效。對于可變基類,C++17引入using聲明的可變形式。


          template?
          struct?Overloader?:?Ts...?{
          ????using?Ts::operator()...;?//?exposes?operator()?from?every?base
          };
          48fac5cc4c3fe529844e326c6640f4d1.webp

          Enforcement(實施建議)

          48fac5cc4c3fe529844e326c6640f4d1.webp

          Diagnose name hiding

          檢出名稱隱藏。


          48fac5cc4c3fe529844e326c6640f4d1.webp

          原文鏈接:

          48fac5cc4c3fe529844e326c6640f4d1.webp

          https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c138-create-an-overload-set-for-a-derived-class-and-its-bases-with-using




          覺得本文有幫助?請分享給更多人。

          關(guān)注【面向?qū)ο笏伎肌枯p松學(xué)習(xí)每一天!

          面向?qū)ο箝_發(fā),面向?qū)ο笏伎迹?/p>

          瀏覽 67
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青娱乐-亚洲高清视频在线观看 | 熟女性爱电影 | 大鸡吧在线 | 欧美在线黄 | 国产精品三级在线 |