Standart kütüphane veya Boost içinde, özel bir STL uyumlu Diziyi gerekli yazımlarla (size_type, value_type, vs ...) doldurmak için bir çeşit yardımcı temel sınıf var. boost::iterator_facade gibi bir şey düşünüyorum, ancak kapsayıcılar için.STL uyumlu kapsayıcı için yazım hataları typedefs
Kendi başıma dönecektim ama böyle bir şeyin zaten varolmadığından emin olmak istedim.
GÜNCELLEME:
Bu benim ile geldi yarar temel sınıftır, durumunda herkes yararlı bulur: Özel bir kabın altında yatan konteynırın
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 basitçe "yankıları" iç içe typedefs. Gerçekten hiçbir şey yok. Varsa bile typedef typename base::size_type size_type
typedef typename base::size_type size_type
'a sahip olsanız bile,
Kullanıcılar, alternatiften daha kolay olduğu için value_type ve yineleyiciyi kullanırlar, ancak ben genellikle value_type & başvuru yerine, örneğin kullanırım (ve vektör kötülüktür). Bu iç içe geçmiş typedeflerin sizin için avantajlı olduğundan emin misiniz? Normalde, öğeleri bir const olarak nitelenecekleri işlevlere geçiririm ve iç içe const_reference typedef'e hiçbir zaman dokunulmaz. –
@Fred: BOOST_FOREACH, destek aralıkları, std :: back_insertion_iterator vb. Gibi şeylerle uyumlu olarak kapsayıcım için endişeleniyorum. Tüm yazım hatalarını yalnızca minimum düzeyde bir alt kümesi sağlamaya ihtiyacım varsa, bilmek isterim hangi. Denemek ve öğrenmek için yeterince kolay olduğunu düşünüyorum. –
Doğru, ancak genel yardımcı programlar genellikle agnostik olarak yazılır; 0x auto bunun için harika. :) –