標準ライブラリまたはBoost内に、カスタムSTL互換シーケンスに必要なtypedef(size_type、value_typeなど)を設定するためのユーティリティベースクラスがあります。私はboost::iterator_facadeのようなものを考えていますが、コンテナのためです。STL互換コンテナの定型句
私は自分自身をロールアップしようとしていましたが、そのようなことがまだ存在していないことを確認したかったのです。
UPDATE:
これは私が思い付いたユーティリティの基本クラスで、場合に誰でも重宝:
template <class C>
class ContainerAdapter
{
public:
typedef C::value_type value_type;
typedef C::reference reference;
typedef C::const_reference const_reference;
typedef C::const_iterator iterator;
typedef C::const_iterator const_iterator;
typedef C::difference_type difference_type;
typedef C::size_type size_type;
protected:
typedef C::container_type;
};
// Usage
class MyCustomContainer : public ContainerAdapter< std::vector<int> >
{
...
};
ContainerAdapterは、単純にカスタムコンテナの根底にあるコンテナの入れ子になったのtypedefを「エコー」。本当にそれには何もありません。
人々はvalue_typeとiteratorを代わりに使用するより簡単ですが、私は通常、参照の代わりにvalue_type&を使用します(たとえば、ベクトルは悪です)。他のネストされたtypedefをあなたに有利に提供していますか?通常、私はアイテムを関数に渡します。ここでは、それらはconst&とにかくバインドされ、ネストされたconst_reference typedefは決して扱われません。 –
@Fred:BOOST_FOREACH、boost range、std :: back_insertion_iteratorなどのコンテナと互換性があるかどうか気になります。すべてのtypedefの最小限のサブセットを提供する必要がある場合は、それは。実験して調べるのは簡単だと思います。 –
真実だが一般的なユーティリティは、通常、不可知論的に書かれている。 0x autoはそれに最適です。 :) –