18202


C++で

[code]

    template <class Type> class Vector
      std::array<Type, dim> value;
    
    public:
      ......
    };
    
[/code]

というテンプレートクラスを作りたいのですが、std::arrayの引数dimを外から指定する方法はありますか？

[code]

    Vector(double, 4) my_vector;
    
[/code]

というような変数宣言ができるようにしたいのですが……

訂正

[code]

    Vector(double, 4) my_vector; → Vector<double, 4> my_vector;
    
[/code]


CC BY-SA 3.0
2015-10-29T08:49:48.667
18201
2015-10-29T10:38:28.563
2015-10-29T10:38:28.563
10725
10725
question
c++
std::arrayの要素数を変数で指定する方法


テンプレート引数に以下の様に定数を指定できます。

[code]

    template <class Type, size_t dim>
    class Vector {
      std::array<Type, dim> value;
    …
    
    Vector<double, 4> my_vector;
    
[/code]


CC BY-SA 3.0
2015-10-29T09:03:13.340
18202
2015-10-29T09:03:13.340
5044
18201
answer


`std::array`は固定長配列でその長さはコンパイル時に決まっている必要があります。変数で指定したい場合は`std::vector`など他のクラスを使うことになります。

* * *

> BLUEPIXYさんの方法できちんと実行できたのですが、sayuriさんの話も聞いたことがあります。これはどういうことでしょうか……？

質問文がいろいろと間違っていることにも原因がありそうです。

> Vector(double, 4) my_vector;

はそもそも構文が間違っていて、

[code]

    // テンプレート引数
    Vector<double, 4> my_vector;
    
    // コンストラクター引数
    Vector<double> my_vector(4);
    
[/code]

のどちらかです。質問タイトルも

> std::arrayの要素数を変数で指定する方法

`テンプレート引数`のことであれば`変数`という表現は不適切です。  
BLUEPIXYさんの方法で実行できているのであればその方がいいですが、先に書いたように変数で指定し実行時に決定される方法には使えません。


CC BY-SA 3.0
2015-10-29T09:05:00.100
18203
2015-10-29T10:28:47.793
2015-10-29T10:28:47.793
4236
4236
18201
answer