pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

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

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

      1. <tfoot id='yZUK4'></tfoot>

        帶有模板成員變量的 C++ 類

        C++ class with template member variable(帶有模板成員變量的 C++ 類)
        • <i id='KU36n'><tr id='KU36n'><dt id='KU36n'><q id='KU36n'><span id='KU36n'><b id='KU36n'><form id='KU36n'><ins id='KU36n'></ins><ul id='KU36n'></ul><sub id='KU36n'></sub></form><legend id='KU36n'></legend><bdo id='KU36n'><pre id='KU36n'><center id='KU36n'></center></pre></bdo></b><th id='KU36n'></th></span></q></dt></tr></i><div class="330mktd" id='KU36n'><tfoot id='KU36n'></tfoot><dl id='KU36n'><fieldset id='KU36n'></fieldset></dl></div>

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

            <tfoot id='KU36n'></tfoot>
              • <bdo id='KU36n'></bdo><ul id='KU36n'></ul>

                • <legend id='KU36n'><style id='KU36n'><dir id='KU36n'><q id='KU36n'></q></dir></style></legend>

                    <tbody id='KU36n'></tbody>

                  本文介紹了帶有模板成員變量的 C++ 類的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  我正在嘗試解決一個編程問題,該問題由一個包含多個參數的對象(稱為圖)組成.每個參數(Parameter 類)可以是以下幾種類型之一:int、double、complex、string - 僅舉幾例.

                  I am trying to solve a programming problem that consists of an object (call it Diagram), that contains several parameters. Each parameter (the Parameter class) can be one of several types: int, double, complex, string - to name a few.

                  所以我的第一反應是將我的 Diagram 類定義為具有模板參數的向量,看起來像這樣.

                  So my first instinct was to define my Diagram class as having a vector of template parameters, which would look like this.

                  class Diagram
                  {
                  private:
                      std::vector<Parameter<T> > v;
                  };
                  

                  這不能編譯,我明白為什么.因此,基于此頁面上的建議 如何聲明屬于類中任何類型對象的數據成員,我將代碼修改為:

                  This doesn't compile, and I understand why. So, based on the recommendations on this page How to declare data members that are objects of any type in a class, I modified my code to look like:

                  class ParameterBase
                  {
                  public:
                      virtual void setValue() = 0;
                      virtual ~ParameterBase() { }
                  };
                  
                  
                  template <typename T>
                  class Parameter : public ParameterBase
                  {
                  public:
                      void setValue() // I want this to be 
                                      // void setValue(const T & val)
                      {
                          // I want this to be 
                          // value = val;
                      }
                  
                  private:
                      T value;
                  };
                  
                  class Diagram
                  {
                  public:
                      std::vector<ParameterBase *> v;
                      int type;
                  };
                  

                  我無法弄清楚如何使用適當的模板化參數調用 setValue 函數.在 ParameterBase 抽象基類中不可能有模板化參數.非常感謝任何幫助.

                  I'm having trouble figuring out how to call the setValue function with an appropriate templated parameter. It is not possible to have a templated parameter in the ParameterBase abstract base class. Any help is greatly appreciated.

                  附言我沒有使用 boost::any 的靈活性.

                  P.S. I don't have the flexibility to use boost::any.

                  推薦答案

                  你們已經很接近了.我添加了一些,因為它們很方便

                  You got very close. I added a few bits because they're handy

                  class ParameterBase
                  {
                  public:
                      virtual ~ParameterBase() {}
                      template<class T> const T& get() const; //to be implimented after Parameter
                      template<class T, class U> void setValue(const U& rhs); //to be implimented after Parameter
                  };
                  
                  template <typename T>
                  class Parameter : public ParameterBase
                  {
                  public:
                      Parameter(const T& rhs) :value(rhs) {}
                      const T& get() const {return value;}
                      void setValue(const T& rhs) {value=rhs;}    
                  private:
                      T value;
                  };
                  
                  //Here's the trick: dynamic_cast rather than virtual
                  template<class T> const T& ParameterBase::get() const
                  { return dynamic_cast<const Parameter<T>&>(*this).get(); }
                  template<class T, class U> void ParameterBase::setValue(const U& rhs)
                  { return dynamic_cast<Parameter<T>&>(*this).setValue(rhs); }
                  
                  class Diagram
                  {
                  public:
                      std::vector<ParameterBase*> v;
                      int type;
                  };
                  

                  然后圖表可以做這樣的事情:

                  Diagram can then do stuff like these:

                  Parameter<std::string> p1("Hello");
                  v.push_back(&p1);
                  std::cout << v[0]->get<std::string>(); //read the string
                  v[0]->set<std::string>("BANANA"); //set the string to something else
                  v[0]->get<int>(); //throws a std::bad_cast exception
                  

                  看起來您的意圖是將擁有資源的指針存儲在向量中.如果是這樣,請注意使 Diagram 具有正確的析構函數,并使其不可復制構造,不可復制賦值.

                  It looks like your intent is to store resource-owning pointers in the vector. If so, be careful to make Diagram have the correct destructor, and make it non-copy-constructable, and non-copy-assignable.

                  這篇關于帶有模板成員變量的 C++ 類的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持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 不能)

                          <bdo id='EXMdI'></bdo><ul id='EXMdI'></ul>
                        • <small id='EXMdI'></small><noframes id='EXMdI'>

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

                          <tfoot id='EXMdI'></tfoot>
                            <tbody id='EXMdI'></tbody>
                          <legend id='EXMdI'><style id='EXMdI'><dir id='EXMdI'><q id='EXMdI'></q></dir></style></legend>
                          • 主站蜘蛛池模板: 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 贝朗斯动力商城(BRCPOWER.COM) - 买叉车蓄电池上贝朗斯商城,价格更超值,品质有保障! | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 电车线(用于供电给电车的输电线路)-百科 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 陕西视频监控,智能安防监控,安防系统-西安鑫安5A安防工程公司 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 自动部分收集器,进口无油隔膜真空泵,SPME固相微萃取头-上海楚定分析仪器有限公司 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 江西自考网-江西自学考试网 | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 空压机网_《压缩机》杂志| 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 飞飞影视_热门电影在线观看_影视大全 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 |