2013-01-18 9 views
2

클래스 또는 함수를 디자인하는 동안 아래에 표시된 방법이 더 좋고 그 이유는 무엇입니까?Variadic 함수 선언 VS 목록 가져 오기 함수

class Container { 

    //Provide this functionality?? 
    void addItemVariadic(const Value& val, ...); 

    //Or provide this functionality?? 
    void addItemList(const list<Value>& vals); 

}; 

addItemVariadic (..) 또는 addItemList (..)와 같은 기능을 제공하는 것이 더 좋습니까?

또는 일부 반복기를 사용하는 것과 같은 기능을 제공하는 것이 더 좋습니까? 아니면 목록 만 찍는 등의 기능을 제한하는 것이 더 낫습니까? 가변 인자 함수를 사용

+0

더 많은 옵션이 있습니다. 반복자를 입력으로 사용하는 함수를 작성하면 모든 stl 컨테이너에서 작동합니다. 구문은 대략 다음과 같습니다 : template void foo (InputIterator begin, InputIterator end) – aCuria

답변

2

당신이 이제까지하지 appriopriate 유형이 변수를 전달하면 함수를 호출 할 때, 그것은 런타임에 충돌합니다

위험 입니다.

반대로 std::list을 사용하면 간단히 컴파일되지 않으며 충돌을 피할 수 있습니다.

Btw : 여기서는 std::list 대신 std::vector을 사용하라고 조언합니다.

EDIT1 한 번에 모든 매개 변수를 입력하는 운영자 < <를 사용 멋진 솔루션 Possible Dupplicate Question..

편집 2 다른 std :: containers 중에서 선택하려면 this question에 대한 선택 그래프가 있습니다. 이 그래프는 C++ 03에서 다루었지만 C++ 1에서 소개 된 새로운 컨테이너는 다루지 않습니다.

+0

항목을 하나씩 추가하거나 하나의 촬영에 추가하는 기능을 제공하는 것이 더 좋습니까? 왜 std :: vector를 사용하면 포인터 오버 헤드가 적기 때문에 유용할까요? – phoad

+0

규칙은 std :: vector가 컨테이너의 작업을 95-99 %의 시간에 수행한다는 것입니다. 우리는 이유를 알기 만하면 std :: deque, std :: list, std :: forward_list를 사용해야한다 : 나는 그것을 선택할 수있는 그래프로 연결하겠다. 변수를 하나의 촬영에 모두 추가하려면 가변적 인 기능이 필요합니다. –

+0

addItem()을 한 항목 당 한 번 호출하거나 벡터에 벡터를 제공하여 호출하는 것을 의미합니다. – phoad