首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

集成模板种

2013-01-08 
集成模板类今天在琢磨如何把一系列模板类 通过一个集合统一管理,因为模板实例化后基类都不是一个东西,无法

集成模板类

今天在琢磨如何把一系列模板类 通过一个集合统一管理,因为模板实例化后基类都不是一个东西,无法使用模板类指针统一调用,但可以另外用抽象基类,这个想法感觉还可以。写了代码进行模拟:

#include <iostream>#include <vector>#include <boost/shared_array.hpp>#include <boost/shared_ptr.hpp>template<class T>class BaseTemplate{public:T Add(T a,T b){m_Data1 = a;m_Date2 = b;return m_Data1+m_Date2;}virtual ~BaseTemplate(){}private:T m_Data1;T m_Date2;};class InterfaceA{public:virtual void Start() = 0;virtual ~InterfaceA(){}};class Drived1: public BaseTemplate<int>, public InterfaceA{public:void Start(){std::cout << Init() << std::endl;}int Init(){return Add(1,2);}int GetData()const{return m_Data;}private:int m_Data;};class Drived2: public BaseTemplate<double>, public InterfaceA{public:void Start(){std::cout << Init() << std::endl;}double Init(){return Add(1.5,2.8);}double GetData()const{return m_Data;}private:double m_Data;};class DataInit{public:DataInit(std::vector<boost::shared_ptr<InterfaceA>>& aVec):m_InterVec(aVec){}void Init(){for (int i = 0; i < m_InterVec.size(); ++i){m_InterVec[i]->Start();}}private:std::vector<boost::shared_ptr<InterfaceA>> m_InterVec;};int main(){boost::shared_ptr<InterfaceA> lpInterface1( new Drived1());boost::shared_ptr<InterfaceA> lpInterface2( new Drived2());std::vector<boost::shared_ptr<InterfaceA>> lVec;lVec.push_back(lpInterface1);lVec.push_back(lpInterface2);DataInit lDataInit(lVec);lDataInit.Init();}


热点排行