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

Variable amount of function arguments in C++

本文关键字:函数 参数 C++      更新时间:2023-10-16

所以,在C语言中,标准方法是stdarg.h。但是我想拉出一些类似的东西:

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

显然,这个想法不是为每个可能的参数量都有不同的结构。有什么建议,标准方法,什么?

谢谢

朱利安。

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

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

尽管您必须定义尺寸不匹配时会发生什么。但是对于这些静态大小的数组,值得一看 std::array。当初始值设定项的维度与自己的维度不匹配时,它们具有明确定义的行为。

你需要使用initializer_list

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

如果您无法访问 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