표준 라이브러리 또는 부스트 내에 필수 typedef (size_type, value_type 등)를 사용하여 사용자 지정 STL 호환 시퀀스를 채우기위한 일종의 유틸리티 기본 클래스가 있습니까? 나는 boost::iterator_facade과 같은 것을 생각하고 있지만, 컨테이너에 대해서.STL 호환 컨테이너에 대한 상용구 typedef
나는 내 자신을 롤업하려고했지만, 그런 것이 존재하지 않았는지 확인하려고했습니다.
는 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 단순히 "에코"중첩 된 형식 정의를. 정말로 아무 것도 없습니다.
사람들은 value_type과 iterator를 대안보다 쉽게 사용할 수 있지만 일반적으로 참조 대신 value_type &을 사용합니다 (예 : 벡터은 악의입니다). 다른 중첩 된 typedef를 제공하는 것이 유리한가요? 일반적으로 나는 항목을 const로 어쨌든 바인딩 할 함수에 전달하고 중첩 된 const_reference typedef는 절대 건드리지 않는다. –
@Fred : BOOST_FOREACH, boost range, std :: back_insertion_iterator 등과 같은 컨테이너와 호환되는 것에 대해 걱정하고 있습니다. 모든 typedef 중 최소한의 하위 집합 만 제공하면됩니다. 어느. 실험하고 알아내는 것이 쉽다 고 생각합니다. –
사실이지만 일반 유틸리티는 일반적으로 불가 지론으로 작성됩니다. 0x auto는 자동으로 좋습니다. :) –