dmd.dtemplate
テンプレート・パラメーター さらに、テンプレート・パラメータのクラスもこのモジュールで定義されている。 基底クラスであるTemplateParameter は継承される:
- TemplateTypeParameter
- TemplateThisParameter
- TemplateValueParameter
- TemplateAliasParameter
- TemplateTupleParameter
テンプレート・セマンティック テンプレートのインスタンス化プロセスの開始は次のようになる:
- TypeInstance 、またはTypeIdentifier 。 TypeInstance TypeIdentifier がそうでないのに対して、Foo!(arg) などはbangがある。
- TemplateInstance がインスタンス化される。
- セマンティックがTemplateInstance (dmd.dsymbolsem を参照)で実行される。
- TemplateInstance はそのTemplateDeclaration を検索する、 を検索し、テンプレート引数に対してセマンティックを実行し、可能なオーバーロードの中から最適なものを推測する。 を検索する。
- TemplateInstance は、同じ引数を持つ既存のインスタンスを検索し、見つかればそれを使用する。 を検索し、見つかればそれを使用する。
- そうでない場合、残りのセマンティックがTemplateInstance に対して実行される。
ソース dtemplate.d
- pure nothrow @nogc @safe inout(Expression)
isExpression
(inout RootObjecto
); - これらの関数は dynamic_cast の代わりとなる。 は動作しない。
- pure nothrow @nogc @safe bool
isError
(const RootObjecto
); - このオブジェクトはエラーか?
- pure nothrow @nogc @safe bool
arrayObjectIsError
(const ref Objectsargs
); - オブジェクトのどれかがエラーか?
- pure nothrow @nogc @safe inout(Type)
getType
(inout RootObjecto
); - argを型として取得してみる。
- Dsymbol
getDsymbol
(RootObjectoarg
); - argがDsymbolを表す場合は、そのDsymbolを返す。Parameters:
RootObject oarg
引数を返す。 Returns:シンボルであればDsymbolを、そうでなければnullを返す。 - bool
arrayObjectMatch
(ref Objectsoa1
, ref Objectsoa2
); - 配列にマッチする
- class
TemplateDeclaration
: dmd.dsymbol.ScopeDsymbol; - ["ミックスイン" テンプレート Identifier (パラメータ) [制約]. https://dlang.org/spec/template.html https://dlang.org/spec/template-mixin.html
- bool
isTrivialAliasSeq
; - パターンにマッチするtemplate AliasSeq(T...) { alias AliasSeq = T; }
- bool
isTrivialAlias
; - パターンにマッチするtemplate Alias(T) { alias Alias = qualifiers(T); }
- bool
deprecated_
; - このテンプレート宣言は非推奨である
- Expression
lastConstraint
; - 最後に評価に失敗した後の制約
- Array!Expression
lastConstraintNegs
; - その負の部分
- Objects*
lastConstraintTiargs
; - のテンプレートインスタンス引数lastConstraint
- bool
overloadInsert
(Dsymbols
); - 既存のTemplateDeclaration 'this' を新しいもの 's' でオーバーロードする。Parameters:
Dsymbol s
挿入されるシンボル 戻り値 成功すればtrueを返す。
- const(char)*
getConstraintEvalError
(ref const(char)*tip
); - 最後の制約評価からのエラーメッセージを破壊的に取得する。Parameters:
const(char)* tip
すべてのオーバーロードを表示した後に表示するヒント - TemplateInstance
findExistingInstance
(TemplateInstancetithis
, ArgumentListargumentList
); - このTemplateDeclarationの新しいインスタンス
tithis
この TemplateDeclaration の新しいインスタンスが与えられる、 のインスタンスが既に存在するかどうかを調べる。Parameters:TemplateInstance tithis
確認するテンプレートインスタンス ArgumentList argumentList
テンプレート化された関数では、異なる解像度が異なるインスタンスを生成するために必要である。 auto ref 異なる解像度で異なるインスタンスが生成されるからである、 テンプレートのパラメータが同じであっても Returns:既存のインスタンスが存在しない場合は、null 。 - TemplateInstance
addInstance
(TemplateInstanceti
); - インスタンスtiをTemplateDeclarationのインスタンステーブルに追加する。 インスタンス化に失敗した場合、後でそれを削除するために使用できるハンドルを返す。
- void
removeInstance
(TemplateInstanceti
); - インスタンスのテーブルからTemplateInstanceを削除する。
入力 addInstance() が返すハンドル
- TemplateTupleParameter
isVariadic
(); - 最後のテンプレート・パラメータがタプルであるかどうかをチェックする、 そうであればそれを返し、そうでなければnull を返す。Returns:最後のテンプレート・パラメータがTemplateTupleParameter
- const bool
isOverloadable
(); - テンプレートをオーバーロードできる。
- bool
reliesOnTident
(Typet
, TemplateParameters*tparams
, size_tiStart
= 0); - 型tの表現が1つ以上のテンプレート・パラメータに依存しているかどうかをチェックする。Parameters:
Type t
テストした型がnullの場合はfalseを返す。 TemplateParameters* tparams
テンプレート・パラメータ。 size_t iStart
テストされるパラメータを制限するtparamsの開始インデックス。もし 0でない場合,tparams[0..iStart]はテスト対象から除外される。 - bool
reliesOnTemplateParameters
(Typet
, TemplateParameter[]tparams
); - t型の表現が1つ以上のテンプレート・パラメータに依存しているかどうかをチェックする。Parameters:
Type t
テストされた型がnullの場合、falseを返す。 TemplateParameter[] tparams
テンプレート・パラメータ。 - abstract class
TemplateParameter
: dmd.ast_node.ASTNode; - class
TemplateTypeParameter
: dmd.dtemplate.TemplateParameter; 構文 ident : specType = defaultType
- class
TemplateThisParameter
: dmd.dtemplate.TemplateTypeParameter; 構文 この ident : specType = defaultType を指定する。
- class
TemplateValueParameter
: dmd.dtemplate.TemplateParameter; 構文 valType ident : specValue = defaultValue とする。
- class
TemplateAliasParameter
: dmd.dtemplate.TemplateParameter; 構文 specType ident : specAlias = defaultAlias
- class
TemplateTupleParameter
: dmd.dtemplate.TemplateParameter; 構文 ident ...
- class
TemplateInstance
: dmd.dsymbol.ScopeDsymbol; 与えられた foo! name = foo tiargs = args
- Expressions*
fargs
; - 関数テンプレート化された関数では、これらは関数名と引数である。 auto ref パラメーターの解決方法が異なるため、関連性がある。 同じテンプレート引数であっても、異なるテンプレートインスタンスを生成する
- final const pure nothrow @nogc @property @safe bool
semantictiargsdone
(); - semanticTiargs()は実行されたか?
- final const pure nothrow @nogc @property @safe bool
havetempdecl
(); - 2番目のコンストラクタで使用されている場合
- final const pure nothrow @nogc @property @safe bool
gagged
(); - インスタンス化がエラー・ギャグ付きで行われた場合
- scope this(const ref Loc
loc
, TemplateDeclarationtd
, Objects*tiargs
); - このコンストラクタは、どの関数 テンプレートをインスタンス化するときだけ呼ばれる。
- final void
printInstantiationTrace
(Classificationcl
= Classification.error, const(uint)max_shown
= global.params.v.errorSupplementCount()); - TemplateInstanceのインスタンス化がエラーになった場合、 TemplateInstanceのインスタンス化でエラーが発生した場合は、ネストされたTemplateInstanceのインスタンス化を行う。 を与える。これらは、ネストされたスコープにスレッドされたリストである。Parameters:
Classification cl
このトレースを、エラーまたは非推奨のいずれかを表示するものとして分類する。 const(uint) max_shown
表示されるトレース要素の最大数(-v/-verror-limitで制御される) - final Identifier
getIdent
(); - テンプレート・インスタンスの識別子を簡単に生成する。 これは、identの75%が決して必要とされないからである。
- final bool
equalsx
(TemplateInstanceti
); - 提案されたテンプレートのインスタンス化と既存のテンプレートのインスタンス化を比較する。 自動参照チェックのため、これは可換ではないことに注意。Parameters:
TemplateInstance ti
既存のテンプレートのインスタンス化 Returns:マッチする場合は真 - final bool
isDiscardable
(); - Returns:インスタンスの内部が廃棄可能であればtrueを返す。 この関数のアイデアは、テンプレート化された関数がその同名のメンバと がその同名のメンバと100%置き換えられるかどうかを調べることである。他のすべてのメンバ を破棄することができる(例えば、コンパイラでメモリを解放するため)、 例えば、テンプレートはリージョンアロケータで展開される、 最終結果は独立してコピーバックされ、領域全体が解放される)、 バイナリから完全に除外することもできる。 現在の実装は、一般的に以下のようなコードに影響する:
template foo(args...) { some_basic_type_or_string helper() { .... } enum foo = helper(); }
これは実装の最も簡単な出発点であったからである。 しかし、後でもっと拡張することもできるし、拡張すべきである。 - final bool
needsCodegen
(); - 非ルート・モジュールでインスタンス化されていなければ真を返す。 が非指定的インスタンス化の一部である場合に真を返す。
注釈 minstは、意味解析が完了するまで安定化しない、 従って、正確な結果を返すために、意味解析中にこの関数を呼ばないこと。
- final bool
findTempDecl
(Scope*sc
, WithScopeSymbol*pwithsym
); - テンプレート・インスタンスに対応するテンプレート宣言を見つける。Returns:検索に失敗した場合はfalseを返す。
注釈: この関数はエラー発生に対してリエントラントである。 この関数はエラー発生に対してリエントラントである。falseを返した場合 を返した場合、このオブジェクトのメンバは変更されない。 同じエラーを再現する。
- final bool
updateTempDecl
(Scope*sc
, Dsymbols
); - sが有効なテンプレートであることを確認し、それを保存する。
入力 sc sはテンプレートの候補シンボルである。以下の可能性がある: テンプレート宣言 funcDeclaration with findTemplateDeclRoot() != NULLである。 候補を含むオーバーロードセット
Returns:更新が成功したらtrueを返す - static bool
semanticTiargs
(const ref Locloc
, Scope*sc
, Objects*tiargs
, intflags
, TupleDeclarationatd
= null); - テンプレートの引数としてtiargsのセマンティックを実行する。
入力 loc sc テンプレートの引数tiargsの配列 フラグ 1: const変数を初期化子に置き換える 2: パラメータを型に分解しない。 最適化されるatdタプル。見つかった場合、ここでは展開されない で展開されず、AliasAssignセマンティックで展開される。
Returns:1つ以上の引数にエラーがある場合はfalseを指定する。 - final bool
semanticTiargs
(Scope*sc
); - tiargsの要素に対してsemanticを実行する。
入力 sc
Returns:1つ以上の引数にエラーがある場合はfalseとする。注釈:この関数はエラー発生に対してリエントラントである。 この関数はエラー発生に対してリエントラントである。falseを返した場合 を返した場合、tiargsのすべての要素は変更されない。
- final bool
findBestMatch
(Scope*sc
, ArgumentListargumentList
); - このTemplateInstanceに最もマッチするTemplateDeclarationを見つける。Parameters:
Scope* sc
このTemplateInstanceが存在するスコープ ArgumentList argumentList
テンプレート化された関数の場合は関数の引数 Returns:true にマッチする場合、false - final bool
needsTypeInference
(Scope*sc
, intflag
= 0); - テンプレートインスタンスが本当にテンプレート化された関数かどうかを判定する、 テンプレート関数は関数から型を推測する必要がある。 引数から型を推測する必要がある。findBestMatchのように、可能性のあるテンプレート候補を繰り返し実行する、 ただし、型推論の必要性だけを調べる。
- final bool
hasNestedArgs
(Objects*args
, boolisstatic
); - TemplateInstanceがTemplateDeclarationのネストされた生成を必要とするかどうかを判断する。 の生成が必要かどうかを判断する。 必要であれば、囲むプロパティを設定し、!= 0 を返す;
- final Dsymbols*
appendToModuleMember
(); - 特定のモジュールに 'this' を追加する members[].
- final void
declareParameters
(Scope*sc
); - テンプレート・インスタンスのパラメータを宣言し、テンプレート・インスタンスの引数で初期化する。 テンプレート・インスタンスの引数で初期化する。
- final Identifier
genIdent
(Objects*args
); - このインスタンスには、ネーム・マングリングのために識別子が必要である。 テンプレート宣言名を取り、そのための型シグネチャを追加することで識別子を作成する。 型シグネチャを追加する。
- void
unSpeculative
(Scope*sc
, RootObjecto
); - IsExpressionは指定された型を推測的に評価できる。 シンボルをインスタンス化したとしても、最終的な実行可能ファイルでは通常不要である。 最終的な実行ファイルには不要である。 しかし、それらのシンボルが実際のコードに漏れる場合、コンパイラはそのシンボルを非指定的であることを示す必要がある。 そのシンボルを生成し、最終的な実行ファイルにリンクする。
- @safe bool
definitelyValueParameter
(Expressione
); - eがテンプレート値のパラメータとしてのみ有効な場合はtrueを返す。 エイリアスやタプルである可能性がある場合は偽を返す。 (この場合でも、値であることが判明する可能性があることに注意)。
- class
TemplateMixin
: dmd.dtemplate.TemplateInstance; 構文 mixin MixinTemplateName [TemplateArguments]
識別子
;- struct
TemplateInstanceBox
; - この構造体は、TemplateInstanceが連想配列のキーになるために必要である。 https://issues.dlang.org/show_bug.cgi?id=15813を修正すれば不要になる。
- MATCH
matchArg
(TemplateParametertp
, LocinstLoc
, Scope*sc
, Objects*tiargs
, size_ti
, TemplateParameters*parameters
, ref Objectsdedtypes
, Declaration*psparam
); - 特定のTemplateParameterにマッチする。
入力 instLoc テンプレートがインスタンス化される場所。 tiargs[] テンプレートインスタンスへの実際の引数 i 番目の引数 parameters[] テンプレートパラメータ dedtypes[] テンプレート・インスタンスへの推論された引数 *psparamは宣言されたシンボルに設定され、dedtypes[i]に初期化される
- struct
TemplateStats
; - テンプレート・インスタンスの統計を収集し、表示する。
- static void
incInstance
(const TemplateDeclarationtd
, const TemplateInstanceti
, boollistInstances
); - このインスタンスを追加するParameters:
TemplateDeclaration td
テンプレート宣言 TemplateInstance ti
tdのインスタンス bool listInstances
テンプレートのインスタンスを追跡する - static void
incUnique
(const TemplateDeclarationtd
, const TemplateInstanceti
); - このユニークなインスタンスを追加する
- void
printTemplateStats
(boollistInstances
, ErrorSinkeSink
); - テンプレートのインスタンス化に関する情報統計を表示する。Parameters:
bool listInstances
テンプレートのインスタンスをリストする ErrorSink eSink
表示が送信される - struct
MATCHpair
; - MATCHのペア
- MATCH
mta
; - 初期テンプレート引数によってテンプレートパラメータにマッチする
- MATCH
mfa
; - 推論されたテンプレート引数によってテンプレートパラメータにマッチする
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku