2016-05-29 9 views
3

あなたは、テンプレート関連する定数を使用して固定サイズの配列を初期化できますか? Cで

std::array<int ,3> arr; //fixed size array of 3 

内の積分を通過させる能力を持っている++私は錆が、このためのサポートが組み込まれていることを知っているが、私は、線形代数ベクトルライブラリのようなものを作成したい場合はどう?

struct Vec<T, size: i32>{ 
    data: [T, size]; 
} 

type Vec3f = Vec::<f32, 3>; 
type Vec4f = Vec::<f32, 4>; 

これは、現在私がD.に何をすべきか私は錆が今Associated Constantsを持っていると聞いています。

私は長い間Rustを使用していませんが、これはこの問題にまったく対処していないようです。

私が見ることができる限り、関連するconstは形質でのみ利用可能であり、それは手でベクトルタイプNを作成する必要があることを意味します。

答えて

4

いいえ、関連付けられた定数は、を助けず、を意味しません。関連するものはの出力ですが、質問内のユースケースはの入力が必要です。原則として、型パラメータと関連する定数を持つ特性を構築することができます(少なくとも、悲しいことに、まだ動作しない型パラメータ—の関連する定数を使用できるとすぐに)。しかし、それはひどい人間工学を持っています。typenumのような既存のハッキングよりはるかに優れていません。

あなたが気づいたように、現在のRustでは実際には実現不可能な多くのことが可能になるので、整数型のパラメータが非常に望まれます。人々talk about this and plan for itしかし、それはまだありません。

+0

非整数ジェネリックパラメータ(整数のうちの整数型)の有用性は、コンパイル時にそれらの値を計算する能力に左右されます。 'A -1'だけの場合は、コンパイル時関数の評価(おそらく始めに制限されているかもしれません)がそれらを得るために必要であると思われます。 –

+0

@MatthieuM。計算をしなくても、固定サイズの配列の共通の特性を一様に実装したり、固定サイズの配列の周りのラッパーである構造を作成するときの重複を減らすなど、コンパイル時に整数を整数にすることは既に非常に便利です(固定サイズベクトルおよび行列)。しかし、私は計算がさらに大きくなることに同意します。 – delnan

+0

固定サイズベクトル/行列の場合、私は 'SmallVec <[T; N]>'を使って、配列型を直接渡すことで作業します。私はコンパイラの特性が 'T'と' N'を抽出するために配列に実装されたことを願っています(私はそれをマクロで自分で実装しています)...現在、整数パラメータを実装するのは時期尚早かもしれません。デザインが今後のユースケースと互換性があることを保証してください。したがって、 'const fn'の経験が増えるまで待つ方が良いかもしれません。 –

1

整数型のパラメータは現在のところサポートされていませんが、そのIIRCのRFCと長年にわたる議論があります。

一方、typenumクレートを使用することができます。

関連する問題