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 に答える