インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

n_index_t

可変個引数テンプレート・クラス n_index_t は、N 次元コンテナー内の位置 (次元の数と各次元のインデックス値) を表します。

構文

template<typename... TypeListT>
class n_index_t

説明

n_index_t は、n 次元空間内の位置を各次元のインデックスのシーケンスで表します。各次元のインデックスは、異なる型で表現できます。この柔軟性のため、同じインターフェイスを利用して、コンパイル時にすべての次元が分かっている場合は fixed<int NumberT> で、実行時に判明する場合は int で、そして実行時に必ず判明する場合は aligned<int Alignment> の倍数で n_index_t を宣言できます。詳細は、「数値表現」を参照してください。

このクラスのオブジェクトを使用して、n_bounds() の包含的な下限、アクセサーの translated_to() の n 次元の位置を示して、コンテナー内のセルを識別できます。

次の表は、n_index_t のテンプレート引数の情報です。

テンプレート引数

説明

typename... TypeListT

型のカンマ区切りリスト。型の数がジェネレーターの次元数を制御します。リスト中の各型は、対応する次元のインデックスを示します。次元の順番は、C++ の多次元配列の添字と同じ (左端から右端) です。

要件: intfixed<NumberT>、または aligned<AlignmentT> 型。

次の表は、n_index_t のメンバーの情報です。

メンバー

説明

static constexpr int rank;

次元数。

static constexpr int row_dimension = rank-1;
最後の次元 row のインデックス。
n_index_t()

デフォルト・コンストラクター。範囲の型のデフォルト値を使用します。

要件: TypeListT のすべての型はデフォルト・コンストラクター。

効果: 次元サイズに対する TypeListT の各型のデフォルト値を使用して、n_index_t を構築します。一般に、すべての型が fixed<NumberT> の場合のみ正しく初期化されます。

n_index_t(const n_extent_t &a_other)

コピー・コンストラクター。

効果: a_other の各次元のインデックス値をコピーして n_index_t を構築します。

explicit n_index_t(const TypeListT & … a_values)

戻り値: ネイティブ型の最後の範囲。

効果: 引数として渡された a_values のリストの対応する値で各次元を初期化して、n_index_t を構築します。a_values は、長さと型が TypeListT によって定義される値のカンマ区切りリストです。

template<int DimensionT> 
auto get() const

要件: DimenstionT >=0 および DimensiontT < rank。

効果: DimensionT のインデックス値を特定します。

戻り値: 0 ベースの TypeListT の DimensionT 位置で宣言された型の、指定された DimensionT のインデックス値。

n_index_t operator +() const

効果: 各次元のインデックスの正の単項値を特定します (操作なし)。

戻り値: 現在のインスタンスのコピー。

auto operator -() const

効果: 各次元のインデックスの負の単項値を特定します。

戻り値: n_index[-get<0>()]

[-get<1>()]

[-get<…>()]

[-get<row_dimension>()]

template<class... OtherTypeListT>
auto operator +(
   const n_index_t<OtherTypeListT...> & a_other) const

要件: a_other のランクはこのインスタンスのランクと同じ。

効果: 各次元のインデックス値と a_other のインデックス値を足して n_index_t を構築します。

戻り値: n_index[get<0>() + a_other.get<0>()]

[get<1>() + a_other.get<1>()]

[get<…>() + a_other.get<…>()]

[get<row_dimension>() +

a_other.get<row_dimension>()]

template<class... OtherTypeListT>
auto operator -(
   const n_index_t<OtherTypeListT...> & a_other) const

要件: a_other のランクはこのインスタンスのランクと同じ。

効果: a_other の各次元のインデックス値をこのインスタンスのインデックス値から引いて n_index_t を構築します。

戻り値: n_index[get<0>() - a_other.get<0>()]

[get<1>() - a_other.get<1>()]

[get<…>() - a_other.get<…>()]

[get<row_dimension>() -

a_other.get<row_dimension>()]

template<class... OtherTypeListT>
bool operator == (const n_index_t<OtherTypeListT...> a_other) const

要件: a_other のランクはこのインスタンスのランクと同じ。

効果: 各次元のインデックスが等しいか比較します。各次元の型ではなく、数値のみ比較されます。

戻り値: すべての次元の数値が等しい場合は true、そうでない場合は false

template<class... OtherTypeListT>
bool operator != (const n_index_t<OtherTypeListT...> a_other) const

要件: a_other のランクはこのインスタンスのランクと同じ。

効果: 各次元のインデックスが等しくないか比較します。 各次元の型ではなく、数値のみ比較されます。

戻り値: 次元の数値が異なる場合は true、そうでない場合は false

template<int DimensionT> 
auto rightmost_dimensions() const

要件: DimenstionT >=0 および DimensiontT < rank。

効果: このインスタンスの右端の DimensionT 値をコピーして、低いランクで n_index_t を構築します。

戻り値: n_index[get<rank - DimensionT>()]

[get<rank + 1 - DimensionT>()]

[get<…>()]

[get<row_dimension>()]

template<class... OtherTypeListT>
auto overlay_rightmost(const n_index_t<OtherTypeListT...> & a_other) const

要件: a_other のランク <= ランク。

効果: 右端の次元の値を a_other からコピーし、このインスタンスの右端の次元の上に a_other を重ねて、n_index_t のコピーを構築します。

戻り値: n_index[get<0>()]

[get<1 >()]

[get<…>()]

[get<rank-a_other::rank>()]

[a_other.get<0>()]

[a_other.get<…>()]

[a_other.get<a_other::row_dimension>()]

次の表は、n_index_t の friend 関数の情報です。

friend 関数 説明
std::ostream& operator << (std::ostream& output_stream, const n_index_t & a_indices)

効果: a_indices の値の文字列表現を a_output_stream に追加します。

戻り値: チェーン呼び出しの a_output_stream への参照。