zoukankan      html  css  js  c++  java
  • C++自己用模板减少工作量

    今天写代码,遇到这样一个类似如下的需求:

    auto componentClassSavedByPLC = std::make_shared<ComponentClassSavedByPLC>();
        m_componentClassies.emplace_back(componentClassSavedByPLC);
    
        auto componentClassSavedByDCSLocalControl = std::make_shared<ComponentClassSavedByDCSLocalControl>();
        m_componentClassies.emplace_back(componentClassSavedByDCSLocalControl);
    
        auto componentClassSavedByCCS = std::make_shared<ComponentClassSavedByCCS>();
        m_componentClassies.emplace_back(componentClassSavedByCCS);
    
        auto componentClassSavedBySIS_1 = std::make_shared<ComponentClassSavedBySIS_1>();
        m_componentClassies.emplace_back(componentClassSavedBySIS_1);
        
        auto componentClassSavedBySIS_2 = std::make_shared<ComponentClassSavedBySIS_2>();
        m_componentClassies.emplace_back(componentClassSavedBySIS_2);
    
        auto componentClassSavedBySLNIPLC = std::make_shared<ComponentClassSavedBySLNIPLC>();
        m_componentClassies.emplace_back(componentClassSavedBySLNIPLC);
    
        auto componentClassSavedByPLCLocalControl = std::make_shared<ComponentClassSavedByPLCLocalControl>();
        m_componentClassies.emplace_back(componentClassSavedByPLCLocalControl);
    
        auto componentClassSavedByLocalInstrument = std::make_shared<ComponentClassSavedByLocalInstrument>();
        m_componentClassies.emplace_back(componentClassSavedByLocalInstrument);
    
        auto componentClassSavedByPanelInstrument = std::make_shared<ComponentClassSavedByPanelInstrument>();
        m_componentClassies.emplace_back(componentClassSavedByPanelInstrument);
    
        auto componentClassSavedByBehindPanelInstrument = std::make_shared<ComponentClassSavedByBehindPanelInstrument>();
        m_componentClassies.emplace_back(componentClassSavedByBehindPanelInstrument);
    
        auto componentClassSavedByLocalPanelInstrument = std::make_shared<ComponentClassSavedByLocalPanelInstrument>();
        m_componentClassies.emplace_back(componentClassSavedByLocalPanelInstrument);
    
        auto componentClassSavedByFarInstrument = std::make_shared<ComponentClassSavedByFarInstrument>();
        m_componentClassies.emplace_back(componentClassSavedByFarInstrument);
    
        auto componentClassSavedByTracedInstrument = std::make_shared<ComponentClassSavedByTracedInstrument>();
        m_componentClassies.emplace_back(componentClassSavedByTracedInstrument);

    就是执行的代码一样,类型不一样,于是我在hpp里面写上如下代码:

    template <class T>
    std::shared_ptr<T> generateInstrumentComponent()
    {
        std::shared_ptr<T> componentClass = std::make_shared<T>();
        return componentClass;
    }

    后面每个改动都直接在这个函数里面改动就行了,每个代码直接改成

    auto componentClass = generateInstrumentComponent<ComponentClassSavedByDCS>();
    m_componentClassies.emplace_back(componentClass);

    就行了,要学会用高级工具!

  • 相关阅读:
    mdx中nonempty 和 non empty的区别
    shrink log和查询数据库 backup,restore,shrink 进度 和 还原历史 的sql (for sqlserver)re
    方差分析 概述
    从 高斯 到 正态分布 到 Z分布 到 t分布
    数据集市 数据仓库 Immon Kimball模型的概念说明
    【React Native 实战】微信登录
    【React Native 实战】商品分类
    一步步学习PHP笔记(李炎恢瓢城web俱乐部-多用户留言系统)01
    wampserver下打开phpMyAdmin出现403错误的问题解决方法
    windows 支持curl命令
  • 原文地址:https://www.cnblogs.com/tangmiao/p/10844434.html
Copyright © 2011-2022 走看看