2011-02-01 2 views
2

STL 반복자을 사용하는 것 이외에 C++에서 상위 수준 목록과 유사한 개체를 나타내는 일반적인 방법이 있는지 알고 싶습니다. . (상위 레벨은 저수준 벡터와는 달리 데이터베이스 응답과 같은 복잡한 객체를 의미합니다). 아마도 C#의 IEnumerable과 비슷한 것입니다. 이것을 사용하는 프로젝트를 본 적이 있다면 참조 할 수 있습니까? 감사.C++에서 IEnumerable?

편집 : 명확한 설명이 왜이 문제에 관심이 있으며 질문의 일부가 아닙니다. 주석에서 질문했듯이 컴파일 타임 다형성과 런타임 사이에 나타나는 중요한 차이점을 설명하는 코드가 있습니다. 컴파일 시간 다형성 타입이 있다고 가정하면 기본적으로 개념 인 (인터페이스이 아님)이있는 두 가지 유형이 있음을 의미합니다.

template<class iterator> 
void myalgorithm(iterator iter) {...} 

을하지만 인터페이스와 런타임 다형성 유형이있을 때, IMyIterator, 당신은 정상 "쓸 수있는 말 :이 다형성 유형의 알고리즘을 적용 할 경우, 는 일반적으로이있을 것이다 그

void myalgorithm(IMyIterator* iter) {...} 

의 "비 일반적인 알고리즘이 두 기능을 실현에 큰 차이는 일반 언어 및 유형 VS 인터페이스 작업 IDE 지지체의 다른 레벨이다. 또 다른 요점은 모든 사람이 템플릿 프로그래밍에 익숙하지 않다는 것입니다. 마지막으로, 두 번째 경우는 구현을 숨길 수 있지만 첫 번째 경우는 헤더 전용입니다. 제발 내가 틀린 곳을 제게 보여줄 수 없다면 그들 사이에는 차이가 없다고 제발 말하지 마세요. 대안의

+0

STL 반복자에 대해 싫어하는 특별한 이유가 있습니까? 아니면 그냥 호기심에서 벗어난 것입니까? – templatetypedef

+0

관리되는 C++에서 예 (C# 및 VB.Net에서 볼 수있는 것과 동일한 인터페이스입니다). 표준 C++에서는 데이터베이스 조작을 처리하기 위해 다른 언어를 사용하는 것이 좋습니다. –

+0

@templatetypedef : 둘 다. 당신이 정말로 관심이 있다면 왜 거기에 내 의견을 * 많이 * 참조하십시오 : http://stackoverflow.com/questions/4852658/polymorphic-iterators-in-c –

답변

1

한 예는 Qt4 introducing Java-Style iterators 다음과 같습니다

QList<int> list; 
... 
QListIterator<int> i(list); 
while (i.hasNext()) 
    sum += i.next(); 
+5

그건 공정하지 않습니다. Qt는 Qt이고 실제로 C++가 아닙니다. –

+0

@Georg : 재미있게 다른 순서로 작업하는 것을 선호합니다. 'bool hasNext() const'와'T next()'를 사용하는 대신 여러 번 항목을 "역 참조"할 수도 있기 때문에'T get() const'와'bool next()'를 사용하고 싶습니다. . –

+0

@Matthieu M : Java에서 수행되는 방법입니다. 그런 식으로 처리 할 좋은 이유가 있거나 ... 그냥 잘못했음을 확신합니다. :) –

2

SCARY iterators을 사용할 수 있습니다. 데이터베이스는 SCARY 반복이 탁월한 예제 중 하나입니다.

그러나 C#의 IEnumerable<T>은 관련된 다형성이 컴파일 타임이 아니라 런타임에있는 것을 제외하면 STL 반복과 전혀 다른 것은 아닙니다. 런타임 위에 자신 만의 런타임 다형성을 쓰는 것은 어렵지 않습니다.

+0

나를 위해, 그 차이가 크다. 컴파일 타임 다형성은 일반적인 알고리즘을 통해서만 처리 할 수 ​​있지만 런타임 다형성 유형의 알고리즘은 일반 일 필요는 없습니다. 마치 다른 언어로 작성된 것처럼 코드가 완전히 변경됩니다. 그래서 적어도 중요합니다. 추신 매우 흥미로운 링크에 감사드립니다. –

+0

@ 7vies : 런타임 다형성의 알고리즘은 컴파일 타임 다형성의 알고리즘과 다르지 않습니다. 인터페이스를 정의한 다음 구현합니다.해당 인터페이스를 컴파일 타임 개념 또는 런타임 ABC로 정의하는지 여부에 관계없이 인터페이스를 구현한다는 사실은 변경되지 않습니다. – Puppy

+3

이게 좋겠다.하지만 실제로는 컴파일 타임의 다형성이 실행 시간을 구현하는 것이 더 복잡하다. (타입 목록과 인터페이스에 대한 포인터 목록을 사용하는 것이 그 하나의 간단한 예이다.) 또 다른 차이점은 실행 시간 다형성은 인터페이스와 구현을 완전히 분리 할 수 ​​있으며 컴파일 타임은 헤더 전용이라는 점입니다. 그래서 나는 분명히 차이가 없다는 것에 동의하지 않는다. –