2012-04-14 6 views
2

Also, in C ist der Standardweg stdarg.h. Aber ich bin auf der Suche etwas, das ein bisschen wie folgt ziehen:Variable Menge an Funktionsargumenten in C++

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

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

Offensichtlich ist die Idee ist nicht verschiedene Konstruktionen für jede mögliche Menge von Argumenten zu haben. Irgendwelche Vorschläge, Standard-Wege, was auch immer?

Danke,

Julian.

+1

Übergeben Sie einen Behälter oder verwenden std :: initialize_list wenn Sie haben, zu verwenden. – Mat

Antwort

4

In C++ 11 können Sie einen std::initializer_list Konstruktor für diese Art von Szenario verwenden. Das ermöglicht diese Art der Initialisierung:

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

obwohl Sie definieren müssen, was passiert, wenn die Dimensionen nicht übereinstimmen. Aber für diese Arten von Arrays mit statischer Größe lohnt es sich, std::array zu betrachten. Diese haben ein gut definiertes Verhalten, wenn die Dimensionen des Initialisierers nicht mit ihren eigenen übereinstimmen.

0

Wenn Sie keinen Zugriff auf C++ 11 initializer_lists haben, können Sie einfach einen Vektor übergeben.

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

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

benötigen Sie initializer_list

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