英語版
このページの英語版を見る
std.range.interfaces
このモジュールは std.range.
メイン std.rangeのサブモジュールである。
を扱うためのテンプレート・ベースのツールを提供するが、実行時のポリモーフィズムが必要な場合など、範囲用のオブジェクト・ベースのインターフェースが必要になることもある。
ランタイム・ポリモーフィズムが必要な場合などである。この目的のために、このサブモジュール
によって作成された範囲オブジェクトをラップするために使用できる、多くのオブジェクトとinterface の定義を提供する。
テンプレートによって作成された std.rangeテンプレートで作成された範囲オブジェクトを囲むために使用できる
InputRange | 入力範囲のラッパー。 |
InputAssignable | 割り当て可能な要素を持つ入力範囲のラッパー。 |
ForwardRange | 前方範囲用のラッパー。 |
ForwardAssignable | 割り当て可能な要素を持つフォワード・レンジ用のラッパー。 |
BidirectionalRange | 双方向範囲用のラッパー。 |
BidirectionalAssignable | 割り当て可能な要素を持つ双方向範囲用のラッパー。 |
RandomAccessFinite | 有限ランダム・アクセス範囲のラッパー |
RandomAccessAssignable | 割り当て可能な要素を持つ有限ランダム・アクセス範囲のラッパー. |
RandomAccessInfinite | 無限ランダムアクセス範囲のラッパー |
OutputRange | 出力範囲のラッパー |
OutputRangeObject | OutputRange インタフェースを実装し、メソッドを仮想関数でラップするクラス。 put メソッドを仮想関数でラップするクラス。 |
outputRangeObject | E型を受け入れるR型の基本範囲を持つOutputRangeObject 。 を作成するための便利な関数である。 |
InputRangeObject | InputRange インタフェースを実装し、入力範囲のメソッドを仮想関数でラップするクラス。 入力範囲メソッドを仮想関数でラップしたクラス。 |
inputRangeObject | を作成するための便利な関数である。InputRangeObject を作成するための便利な関数である。 |
MostDerivedInputRange | 範囲に最もマッチするインターフェース型を返す。 |
License:
Authors:
Andrei Alexandrescu, David Simcha, and
Jonathan M Davis. Credit for some of the ideas
in building this module goes to
Leonardo Maffi.
- interface
InputRange
(E); - これらのインターフェイスは、要素型Eを持つ入力範囲の仮想的な関数ベースのラッパーを提供することを意図している。 これは、DLL関数や仮想関数のように、明確に定義されたバイナリ・インターフェースが必要な場合に有用である。 DLL関数や仮想関数がジェネリックな範囲をパラメータとして受け取る必要がある場合などである。 が汎用範囲をパラメータとして受け取る必要がある場合などである。ただし isInputRange とその仲間たちは、構造インターフェイスへの適合性をチェックする これらのinterface 型の実装ではないことに注意されたい。
制限事項 これらのインターフェースは、ref 要素へのアクセスを転送することはできない。
ラップされた範囲の無限性は伝搬されない。 非ランダムアクセス範囲の場合、長さは伝搬されない。See Also:Examples:import std.algorithm.iteration : map; import std.range : iota; void useRange(InputRange!int range) { // 関数本体。 } // 範囲型を作成する。 auto squares = map!"a * a"(iota(10)); // それをインターフェイスで包む。 auto squaresWrapped = inputRangeObject(squares); // それを使う。 useRange(squaresWrapped);
- @property E
front
(); - E
moveFront
(); - コール std.range.primitives.moveFront可能であれば を呼び出す。そうでなければ例外をスローする。 UnsupportedRangeMethod例外をスローする。
- void
popFront
(); - @property bool
empty
(); - int
opApply
(scope int delegate(E));
intopApply
(scope int delegate(size_t, E)); - foreach 反復はopApplyを使用する。 なぜなら、ループごとに1回のデリゲート呼び出しの方が、3回の仮想関数呼び出しよりも速いからである。
- interface
ForwardRange
(E): InputRange!E; - E 型の順方向範囲用インターフェース。
- @property ForwardRange!E
save
();
- interface
BidirectionalRange
(E): ForwardRange!E; - E 、双方向範囲のためのインターフェース。
- @property BidirectionalRange!E
save
(); - @property E
back
(); - E
moveBack
(); - 呼び出し std.range.primitives.moveBack可能であれば ラップされた範囲を呼び出す。そうでない場合は、例外をスローする。 UnsupportedRangeMethod例外
- void
popBack
();
- interface
RandomAccessFinite
(E): BidirectionalRange!E; - E 型の有限ランダムアクセス範囲用インターフェース。
- @property RandomAccessFinite!E
save
(); - E
opIndex
(size_t); - E
moveAt
(size_t); - @property size_t
length
(); - alias
opDollar
= length; - RandomAccessFinite!E
opSlice
(size_t, size_t);
- interface
RandomAccessInfinite
(E): ForwardRange!E; - E 型の無限ランダムアクセス範囲用インターフェース。
- enum bool
empty
; - E
moveAt
(size_t); - を呼び出す。 std.range.primitives.moveAtを呼び出す。 可能であれば、ラップされた範囲を呼び出す。そうでない場合は例外をスローする。 UnsupportedRangeMethod例外を投げる。
- @property RandomAccessInfinite!E
save
(); - E
opIndex
(size_t);
- interface
InputAssignable
(E): InputRange!E; - InputRangeに代入可能な要素を追加する。
- @property void
front
(EnewVal
);
- interface
ForwardAssignable
(E): InputAssignable!E, ForwardRange!E; - ForwardRangeに割り当て可能な要素を追加する。
- @property ForwardAssignable!E
save
();
- interface
BidirectionalAssignable
(E): ForwardAssignable!E, BidirectionalRange!E; - BidirectionalRange に割り当て可能な要素を追加する。
- @property BidirectionalAssignable!E
save
(); - @property void
back
(EnewVal
);
- interface
RandomFiniteAssignable
(E): RandomAccessFinite!E, BidirectionalAssignable!E; - RandomAccessFinite に割り当て可能な要素を追加する。
- @property RandomFiniteAssignable!E
save
(); - void
opIndexAssign
(Eval
, size_tindex
);
- interface
OutputRange
(E); - E 型の出力レンジのインターフェース。 使い方は InputRange インターフェースと子孫に似ている。
- void
put
(E);
- class
OutputRangeObject
(R, E...): staticMap!(OutputRange, E); - すべての型Eに対してOutputRange インタフェースを実装し、各型のメソッドをラップする。 put E メソッドを仮想関数でラップする。
- this(R
range
);
- template
MostDerivedInputRange
(R) if (isInputRange!(Unqual!R)) - R に最もマッチするインタフェース型を返す。
- template
InputRangeObject
(R) if (isInputRange!(Unqual!R)) - R が扱う最も派生したインタフェースを実装し、関連するすべての範囲プリミティブを仮想関数でラップする。 すべての関連する範囲プリミティブを仮想関数でラップする。 R がすでに がすでにInputRange インタフェースから派生している場合、それ自身をエイリアスにする。
- InputRangeObject!R
inputRangeObject
(R)(Rrange
)
if (isInputRange!R); - 適切な型のInputRangeObject を作成するための便利な関数。 例として InputRangeを参照のこと。
- template
outputRangeObject
(E...) - 基本範囲を持つOutputRangeObject を作成するための便利な関数である。 R を持つE を作成するための便利な関数である。Examples:
import std.array; auto app = appender!(uint[])(); auto appWrapped = outputRangeObject!(uint, uint[])(app); static assert(is(typeof(appWrapped) : OutputRange!(uint[]))); static assert(is(typeof(appWrapped) : OutputRange!(uint)));
- OutputRangeObject!(R, E)
outputRangeObject
(R)(Rrange
);
- class
UnsupportedRangeMethod
: object.Exception; - インターフェイスメソッドがラップされた範囲でサポートされていない場合にスローされる。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku