2016-11-29 1 views
0

QSqlQuery (행을 순회하고 각 행에 대해 새 클래스 유형 객체를 생성하기 위해)에 대한 입력 반복기 래퍼를 수행하고 있으며 반환 유형이 operator*인지 알아야합니다.`input_iterator :: operator *`에 대한 반환 유형은 무엇입니까?

input iterator concept description에서 cppreference에 따르면, *i의 반환 형식이되어야합니다

참조,

과 호기심 VALUE_TYPE하는 컨버터블, 그 쉼표 , 표현하는 경우에 대해 의심 해요 제 경우에는 operator*을 호출 할 때 새로운 객체 (형식이 클래스 템플릿 매개 변수 임)를 구성하기 때문에 or 또는 and ("value_type에 대한 참조 또는 value_type에 대한 변환" . 따라서 참조를 반환 할 수 없습니다.

입력 반복기 "개념"과 일치 시키려면 값으로 개체를 반환 할 수 있습니까?

+0

일반적으로 iterator는 증가시킬 때 새 값을 가져 와서 내부에 저장 한 다음 참조를 역 참조 할 때 참조를 반환합니다. – Brian

+0

'value_type'은 템플릿이기 때문에, 클래스 자체에 건설을 위임합니다 ('fetch'라는 'value_type'의 정적 멤버 함수, 행 수신 및 새 객체 반환). 그 객체가 얼마나 비싸 냐고 모르기 때문에, 객체가 할당 가능하거나 아닌지 등등,'value_type'에 새로운 요구 사항을 부과하지 않고 객체를 반복기 클래스 내에 "저장"하는 방법을 모르거나 'new' (작은 객체에서는 불필요 할 수 있습니다). –

답변

2

iterator_traits<>은 5 가지 유형을 정의해야하며 그 중 하나는 reference이므로 쉼표입니다. 가치에 의해 돌아올 수 있습니다. const_iterator에 대해 그렇게하는 것이 공정한 것입니다. const가 아닌 경우 원본을 수정할 수 없습니다. 나는 이것이 당신이 SQL 쿼리를 가지고 있기 때문에 여기에 OK라고 생각한다. 이 경우 typedef value_type reference;iterator_traits<T> 안에 넣습니다.

관련 문제