我對模板的實際使用頗爲陌生,所以我有以下設計問題。從一個抽象基類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