2012-04-14 110 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

傳遞一個容器,或者如果你有使用std :: initialize_list。 – Mat 2012-04-14 07:50:28

回答

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. 
};