需求背景:
比如说参数化建模中,需要创建不同的图元(如墙梁板柱),这些图元创建的步骤相同构造图元的参数不同(先检验参数合法性、构造三维体、存储到对应数据库中)。
解决方案:
1、先抽象;相同点(墙梁板柱都是三维体,构造的步骤相同),不同点(所需参数不一样、创建的细节不一样)。
经分析可以先提基类和类模板的思想。基类参数采用模板,不同子类的不同参数等子类来初始化。
详细实现(简易代码示例):
#pragma once
#include "StdAfx.h"
#include <string>
#include <iostream>
template<typename DataT>
class CBaseObject
{
public:
CBaseObject():m_objectData(nullptr){}
~CBaseObject(){}
void setParam(DataT* objectData) { m_objectData = objectData;}
DataT* getParam() { return m_objectData; }
virtual void doSomething() = 0;
protected:
DataT* m_objectData;
};
//////////////////////////////////////////////////////////////////////////
class AParam
{
public:
//to do A图元需要的实际参数
};
class BParam
{
public:
//to do B图元需要的实际参数
};
//////////////////////////////////////////////////////////////////////////
class AObject : public CBaseObject<AParam>
{
public:
AObject(){}
~AObject(){}
void doSomething() { }
};
class BObject : public CBaseObject<BParam>
{
public:
BObject(){}
~BObject(){}
void doSomething() { }
};