이와 비슷한 작업을 수행 할 수 있습니까? 특히 내부 유형을 템플릿 매개 변수로 사용하여 템플릿 클래스를 상속 함
template<class T> struct A {
};
struct B : public A<B::X> {
typedef string X;
};
가, 내가
Enumerator
를 작성하는 것을 시도하고, 그 또한 카운터와 몇 가지 다른 기능에 대한 반복자 값을 보유하는 개체에 대한 반복과 역 참조 수와 추가로 제공하는 액세스를 계산하는 반복자 래퍼입니다 . 순간에 당신이
B::X
사용하기 때문에 당신이, 유형
B::X
(또는 그 문제에 대한 클래스
B
가) 완전히 선언되지 수 없습니다
template<class Iterator>
struct Enumerator : public iterator<input_iterator_tag, Enumerator<Iterator>::value_type>
{
typedef size_t counter_type;
struct value_type
{
counter_type i;
const typename Iterator::value_type& a;
value_type(const counter_type& i, const typename Iterator::value_type& a) : i(i), a(a) {}
};
counter_type i;
Iterator it;
Enumerator() : i(0), it() {}
Enumerator(const Iterator & it) : i(0), it(it) {}
bool operator==(const Enumerator& a) const {return this->it==a.it;}
bool operator!=(const Enumerator& a) const {return this->it!=a.it;}
Enumerator& operator++() {++this->i; ++this->it; return *this;}
Enumerator operator++(int) {Enumerator tmp(*this); this->operator++(); return tmp;}
const value_type& operator*() const {return value_type(i,*this->it);}
};
이것이 효과가있을 것이라고 생각합니다. 감사합니다 – user3503380
이 경우에는 using 키워드가 작동하지 않습니다 ('error : 알 수없는 type name 'value_type''). 그러나 또 다른 typedef typedef typename iterator :: value_type> :: value_type value_type;'in 파생 된 클래스 열거 자 않습니다. 왜 여기에 쓸모가 없습니까? –
user3503380
아,'typename을 사용하면 나를 위해 작동합니다. – user3503380