2012-04-14 3 views
2

따라서 C에서 표준 방법은 stdarg.h입니다. 그러나 나는 조금이 같은 것을 올려 찾고 있어요 :C++의 함수 인수 가변 수

template<int A> 
class MyClass { 
public: 
    MyClass(...) { 
     // fill each value of array with an argument. 
    }; 

    virtual ~MyClass() { }; 
private: 
    float array[A]; 
}; 

물론, 아이디어는 인수의 가능한 모든 금액에 대해 서로 다른 구조를 가질 수 없습니다. 어떤 제안, 표준 방법, 무엇이든지?

감사합니다.

줄리안.

+1

를 사용하거나 당신이있는 경우 표준 : initialize_list 사용해야합니다. – Mat

답변

4

C++ 11에서는 이러한 종류의 시나리오에 std::initializer_list 생성자를 사용할 수 있습니다. 따라서 다음과 같은 유형의 초기화가 가능합니다.

MyClass<5> x{1,2,3,4,5}; 

크기가 일치하지 않을 때 수행 할 작업을 정의해야합니다. 그러나 이러한 종류의 정적 크기 배열의 경우 std::array을 살펴볼 필요가 있습니다. 이니셜 라이저의 크기가 자신의 크기와 일치하지 않으면 잘 정의 된 동작을합니다.

0

C++ 11 initializer_lists에 액세스 할 수없는 경우 벡터를 전달할 수 있습니다.

MyClass(const std::vector& values) { 
    //copy values into array 
}; 

MyClass someClass(std::vector<int>(10,4)); //adds 10x 4 to the vector 
1

당신은 컨테이너를 통과 initializer_list

explicit MyClass(std::initializer_list<T> list_args){ 
    // fill each value of array with an argument. 
};