// allows a group of objects to be treated in the same way as a single instance of an object.
//
TuComposite<CuMyObject> myComposite;
CuMyObject *pMyObject = &myComposite;
//
class CuMyCompositeObject : public TuComposite<CuMyObject>
{
...
};
// TuComposite.h
template <typename T>
class TuComposite : public T
{
protected:
vector<T*> _itsElement;
typename vector<T*>::iterator _itor;
public:
TuComposite(){};
virtual ~TuComposite(){};
void push_back(T *pElement){ _itsElement.push_back(pElement); }
void insert(int n, T *pElement){ _itsElement.insert(_itsElement.begin() + n, pElement); }
T* at(const int nIndex){ return _itsElement[nIndex]; }
void reserve( int _Count ){_itsElement.reserve(_Count); }
int size(){ return _itsElement.size(); }
void remove(T *pElement);
void clear();
};
template <typename T>
void TuComposite<T>::clear()
{
_itor = _itsElement.begin();
while( _itor != _itsElement.end() )
{
T* pElement = *_itor;
delete pElement;
_itor++;
}
_itsElement.clear();
}
template <typename T>
void TuComposite<T>::remove(T *pElement)
{
_itor = _itsElement.begin();
while( _itor != _itsElement.end() )
{
if( pElement == *_itor )
{
_itsElement.erase(_itor);
break;
}
_itor++;
}
}
2010年1月5日 星期二
TuComposite - Template of Composite pattern
訂閱:
張貼留言 (Atom)
在這裡沒打算繼承 vector, 在沒有多型需求下, 不考慮使用繼承!
回覆刪除