我对模板的实际使用颇为陌生,所以我有以下设计问题。从一个抽象基类Bunch
派生模板化基类中的派生类
我设计类Bunch2d
和Bunch4d
:
class Bunch {virtual void create()=0;};
class Bunch2d : public Bunch {void create();};
class Bunch4d : public Bunch {void create();};
类Bunch
将包含一个容器,一个deque
或vector
(见this question: Choice of the most performant container (array))的Particle
的:
typedef Blitz::TinyVector<double,DIMENSIONS> Particle;
因此,您看到我的问题:Bunch
必须包含此容器,因为在我的一堆“基本”操作是“维独立”(如“容器的大小”,“清除容器”等),所以我认为该容器属于基类(“Bunch”有一个'容器)。
但是这个容器必须知道派生类的尺寸(2或4)。
所以我的想法是用一个模板基类来给typedef的容器的正确尺寸:
enum Dimensions {TwoDimensions = 2, FourDimensions = 4, SixDimensions = 6};
template<Dimensions D> class Bunch
{
protected:
typedef Blitz::TinyVector<double,D> Particle;
std::deque<Particle> particles_store;
public:
virtual void create() = 0;
virtual ~Bunch();
};
class Bunch2d : public Bunch<TwoDimensions>
{
public:
~Bunch2d();
void create();
};
class Bunch4d : public Bunch<FourDimensions>
{
public:
~Bunch4d();
void create();
};
你能给我你的意见对这个设计?它会正确使用模板吗?面向对象概念的有效性如何?用模板化的基类?
感谢您的帮助/回答/意见。
不确定你的层次结构......在现实生活中,2D空间将是4D空间的特例,这是6D空间的一个特例。 – 2010-09-06 09:08:00
如果我在2d的情况下,我不想携带我的6维TinyVector例如。 – 2010-09-06 09:24:48