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

を使用する必要があります。 – Mat

答えて

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

あなたがそれを持っている場合は、コンテナを渡すかのstd :: initialize_listを使用initializer_list

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