2012-12-21 3 views
0

출력 매개 변수로 컨테이너를 허용하는 메소드가있을 때, 그 책임은리스트를 지우는 것입니다. 이 경우출력 매개 변수로 컨테이너 유형을 받아들이는 메소드에 대한 프로토콜/규약

bool GetResults(int nID, list<string>& results) 
{ 
    ..... 
} 

, 예를 들어 (모든 경우), 메소드 GetResults 목록을 취소해야합니까? 또는 발신자가 자신이하는 일을 알고 있다고 가정해야합니까? GetResults 출력 목록을 지 웁니다 경우, 그것은 당신이 무엇을 선호 달려 있다는 대답은 정말,

list<string> results. 

GetResults(1,results) 

GetResults(17,results) 
+0

일반적으로 'std :: list'는 거의 사용하지 않는 것이 좋습니다. 흥미로운 대안은 bool과 vector의 튜플을 반환하고 호출자가 tie를 사용하도록 기대하는 것입니다. 또 다른 접근법은 호출자가 요청할 때 출력 반복자를 채우는 것입니다. – Yakk

답변

1

를 여러 번 호출, 예를 들어 에서 결과를 수집하는 호출자 노력을 부정 할 수하고 무슨 말을 인터페이스 사양 및 그것에 충실.

당신이 섞이지 않고 일관성이있는 한, 나는 누가 그 목록을 비우는가가 중요하지 않다고 생각합니다.

template <typename OutputIterator> 
OutputIterator GetResults(int nID, OutputIterator out) 

이 호출자에게 다시 결과를 취소하는 결정을 밀어 :

2

나의 제안은 출력 반복자를 취할 수 있도록 이러한 방법을 작성하는 것입니다.

결과를 호출자에게 보류하는 데 사용할 컨테이너에 대한 결정을 푸시합니다. 더 이상 인터페이스에 하드 코드 std::list이 필요하지 않습니다.

관련 문제