Generic Programming with C++ Template
■ このスレッドは過去ログ倉庫に格納されています
0681デフォルトの名無しさん
NGNGEffective STLの第2項、「コンテナに依存しないコードという幻想に注意しよう」を
読んだ上で言ってます。
vector,deque,listってのは、しょせん実装の詳細なわけですから、最初っから
「汎用シーケンスコンテナ」ってのがあって、その実装を、vector,deque,listなどの中から
ポリシーで選べたら便利なんじゃないかと思うわけですが。
Effective STLには、たとえば「vectorをサポートしようとすると、push_frontとpop_frontを
使用できない」とか書いてあります。要するに、「全部に共通するメンバ関数がないから、無理」
ってなことに過ぎないわけでして。全部ラップして作り直せば問題解決なんでは、と思った
わけです。どうでしょう?
// ポリシークラスその1。vectorによる実装。
template<class T>
class ImplVector
{
public:
typedef std::vector<T> cont_t;
typedef cont_t::iterator Iter;
typedef cont_t::size_type SizeType;
private:
cont_t c_;
public:
void PushFront(T val){
c_.insert(c_.begin(),T);
}
void PushBack(T val){
c_.push_back(T);
}
void Erase(T val){
// eraseとremoveの慣用的用法ってやつ。
c_.erase(remove(c_.begin(),c_.end(),val),c_.end());
}
T& operator[](SizeType n){
return c_[n];
}
};
■ このスレッドは過去ログ倉庫に格納されています