fat interface?
気付くとこんな感じの I/F を書いてる
class Contents { struct Content { // データメンバがいっぱいあるって事を言いたいわけです int d1_; float d2_; bool d3_; // (*1) で push_back を oneliner したいがために ctor を定義する Content(int d1, float d2, bool d3) : d1_(d1), d2_(d2), d3_(d3) { } }; std::vector<Content> contents_; public: // この I/F が気に食わない void AddEntry(int d1, float d2, bool d3) { contents_.push_back(Content(d1, d2, d3)); // (*1) } };
こんな事していると SetEntry とか RemoveEntry とか、そういう(引数一杯な)I/F を用意する羽目になるんだよな。
ぶっちゃけ
typedef std::vector<Content> Contents;
ってしておいて
pContents_->push_back(Content(d1, d2, d3));
でいいじゃないかと。struct Content をクライアントから隠す必要ないじゃないかと。ってか、隠す方がダメなんじゃないかと思うわです。
なにより
標準アルゴリズムがつかえねえ
という所が痛すぎ。
で、ちょっと話は替わって、上の話でいくと標準アルゴリズムに食わせたい場合は AddEntry は push_back としなきゃならないわけです。
bool を返すメソッドはすべからく Is ではじめるという Coding Style を採用したい場合は、IsEmpty と empty の2つを用意する必要になりませんかね?
boost とかに無いですかね? iterator_adaptor ならぬ container_adaptor なるものが...