関連するものは何も見つかりませんでしたが、これが既に要求されていればごめんなさい。私はときどき私が内部で2つの異なる容器を言うクラスを持っている儀式で自分自身を見つける。次のようなもの:C++:多くのコンテナを含むクラスのインターフェイスを設計する
class Foo
{
public:
typedef std::vector<int> int_list;
typedef std::vector<X> x_list;
// It would be nice if the user could iterate through these etc. so that I
// could define functions that operate on them as non-member non-friends.
typedef int_list::size_type int_list_size_type;
typedef int_list::const_iterator int_list_const_iter;
typedef x_list::size_type x_list_size_type;
typedef x_list::const_iterator x_list_const_iter;
int_list_const_iter int_list begin() const { return ints_.begin(); }
x_list_const_iter begin() const { return xs_.begin(); }
int_list::size_type size_of_ints() const { return ints_.size(); }
x_list::size_type size_of_xs() const { return xs_.size(); }
// And so forth ... !
private:
int_list ints_;
x_list xs_;
};
どういうわけか私は不安です。これは私がやっていることをするためのスマートな方法ですか?基本的には、すべてのコンテナに対して、typedefと(constがオーバーロードされる)メソッドの開始や終了などが必要です。私は興味があります:typedefsなどの名前を付けてインターフェイスを設計する方法は何でしょうか?私は基本的には、インターフェースとメソッドの爆発が心配だと思います。
begin/endメソッドの数を制限する1つの方法は、いくつかのタグを使用するテンプレートベースのアプローチですが、それが合理的かどうかはわかりません。
ありがとうございます!
正反対ですが、私は言うでしょう。インターナル上のすべてのオペレーションが経由して行われた場合、クラスではENOUGHは実行されません。クライアントコード。 –
+1は答えとコメントの両方に+1する:これは、クライアントが望むことを何でもして、コンテナ間に何らかの一貫した状態を保証することを許可することの間の厄介な中間地のように見える。 – suszterpatt
@ノア・ロバーツ:それは良い点です。 –