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

n_bounds_generator

n_bounds_t を簡単に作成できるようにします。#include <sdlt/n_bounds.h>

構文

template<typename... TypeListT>
class n_bounds_generator;

namespace { 
    // ジェネレーター・オブジェクトのインスタンス
    n_bounds_generator<> n_bounds; 
}

説明

ジェネレーター・オブジェクトは、bounds_t<LowerT, UpperT> 値に再帰的な構築演算子 [] を提供し、n_bounds_t<…> のインスタンスを 1 次元ずつ作成できるようにします。その主な目的は、C の多次元配列定義に似た構文の使用を可能にすることです。

ジェネレーター・オブジェクトとファクトリー関数を使用しないでインスタンス化する場合:

n_bounds_t<bounds_t<fixed<540>, fixed<1080>>,
           bounds_t<fixed<960>, fixed<1920>>> bounds1(bounds_t<540_fixed,1080_fixed>(), 
        bounds_t<960_fixed, 1920_fixed>));

n_bounds_t<bounds_t<int, int>,
           bounds_t<int, int>> bounds2(bounds_t<int, int>(540,960), 
        bounds_t<int, int>(960, 1920));
ジェネレーター・オブジェクトとファクトリー関数を使用してインスタンス化する場合:
auto bounds1 = n_bounds[bounds(540_fixed, 1080_fixed)]
                       [bounds(960_fixed, 1920_fixed)];
auto bounds2 = n_bounds[bounds(540, 1080)]
                       [bounds(960, 1920)];
または、n_index_t および n_extent_t ジェネレーター・オブジェクトと演算子 () を使用する場合:
auto bounds1 = n_bounds(n_index[540_fixed][960_fixed], 
                         n_extent[540_fixed][960_fixed]);

auto bounds2 = n_bounds(n_index[540][960], 
                        n_extent[540][960]);

クラス階層

n_bounds_generator<…> は、n_bounds_t<...> のみから派生し、データメンバーまたは引数として直接使用されることは想定されていません。ジェネレーター・オブジェクト n_bounds は、n_bounds_t<…> が想定される場所では自動的にダウンキャストされます。

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

テンプレート引数

説明

typename... TypeListT

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

要件: リストに含まれる型は bounds_t<LowerT, UpperT>。

次の表は、n_bounds_t から継承される型に加えて、n_bounds_generator のメンバーとして定義されている型の情報です。

メンバーの型

説明

typedef n_bounds_t<TypeListT...> value_type

チェーン表記の [] 演算子の呼び出しにより生成された型の値。

次の表は、n_bounds_t から継承されるメンバーに加えて、n_bounds_generator のメンバーの情報です。

メンバー

説明

n_bounds_generator()

要件: TypeListT は空。

効果: 境界が指定されていないジェネレーターを構築します。

n_bounds_generator(const n_bounds_generator &a_other) 

効果: a_other から境界の値をコピーしてジェネレーターを構築します。

template<typename LowerT, typename UpperT>
auto
operator [] (const bounds_t<LowerT, UpperT> & a_bounds) const 

効果: n_bounds_generator<…> と右端の bounds_t<LowerT, UpperT> ベースの次元を構築します。

戻り値: n_bounds_generator<TypeListT..., bounds_t< LowerT, UpperT >>。

template<class... IndexTypeListT, class... ExtentTypeListT>
auto operator () ( 
 const n_index_t<IndexTypeListT...> & a_indices,
 const n_extent_t<ExtentTypeListT...> & a_extents)  const

要件: a_indices のランクは a_extents のランクと同じで、TypeListT は空。

効果: n_bounds_generator<…> を構築します。n 下限は a_indices によって指定され、n 上限は a_extents + a_indices。

戻り値: n_bounds[bounds(a_indices.get<0>(),

a_indices.get<0>() + a_extents.get<0>())]

[bounds(a_indices.get<1>(),

a_indices.get<1>() + a_extents.get<1>())]

[bounds(a_indices.get<…>(),

a_indices.get<…>() + a_extents.get<…>())]

[bounds( a_indices.get<row_dimension>(),

a_indices.get< row_dimension >() + a_extents.get<row_dimension >())]

value_type value() const

戻り値: n_bounds_t<…> とジェネレーターにより集約された多次元境界の適切な型と値。