C ++中可变数量的函数参数

时间:2012-04-14 07:45:46

标签: c++ function arguments

因此,在C中标准方法是stdarg.h。但是我想要提取一些类似的东西:

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

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

显然,我们的想法是不要为每个可能数量的参数设置不同的结构。任何建议,标准方式,无论如何?

谢谢,

儒略。

3 个答案:

答案 0 :(得分:4)

在C ++ 11中,您可以使用std::initializer_list构造函数来实现此类场景。这允许这种类型的初始化:

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

虽然您必须定义尺寸不匹配时会发生什么。但对于这些静态大小的数组,值得关注std::array。当初始化程序的维度与它们自己的维度不匹配时,它们具有明确定义的行为。

答案 1 :(得分:1)

您需要使用initializer_list

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

答案 2 :(得分: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