2

因此,在 C 中,标准方式是 stdarg.h。但我正在寻找一些像这样的东西:

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

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

显然,这个想法并不是对每一个可能的论点都有不同的结构。任何建议,标准方法,无论如何?

谢谢,

朱利安。

4

3 回答 3

4

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

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

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

于 2012-04-14T07:50:04.897 回答
1

你需要使用initializer_list

explicit MyClass(std::initializer_list<T> list_args){
    // fill each value of array with an argument.
};
于 2012-04-14T08:03:48.873 回答
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
于 2012-04-14T07:54:26.487 回答