std.traits
コンパイル時に 型の情報を取り出すためのテンプレートです。Authors:
Walter Bright, Tomasz Stachowiak (isExpressionTuple), Andrei Alexandrescu
- 関数か、関数ポインタ、デリゲート、
opCallメソッドを持つ構造体、opCallメソッドを持つ構造体へのポインタ、
あるいはopCallメソッドを持つクラス
から返値の型を取得します。
Example:
import std.traits; int foo(); ReturnType!(foo) x; // x は int 型
- 関数か、関数ポインタ、あるいはデリゲートから
引数の型をタプルとして取得します。
Example:
import std.traits; int foo(int, long); void bar(ParameterTypeTuple!(foo)); // void bar(int, long); の宣言 void abc(ParameterTypeTuple!(foo)[1]); // void abc(long); の宣言
- 構造体かクラスをフィールドのタプルに変換したときの型を取得します。
これは、仮想関数テーブルへのポインタのような隠しフィールドを除いた、
メモリ空間を消費するフィールドのみで構成される
タプルとなります。
- 構造体やクラスのフィールドのプリミティブな型のタプルを
topological order で返します。
Example:
struct S1 { int a; float b; } struct S2 { char[] a; union { S1 b; S1 * c; } } alias RepresentationTypeTuple!(S2) R; assert(R.length == 4 && is(R[0] == char[]) && is(R[1] == int) && is(R[2] == float) && is(R[3] == S1*));
- T の表現に以下のいずれかが含まれているときに、true を返します:
- 生のポインタ U* で U がinvariantでないもの
- 配列 U[] で U が invariant でないもの
- クラス参照 C で C が invariant でないもの
- 指定したクラスやインターフェイスの基底型と基底インターフェイスからなる
型タプルを返します。BaseTypeTuple!(Object)
は空の型タプルを返します。
Example:
import std.traits, std.typetuple, std.stdio; interface I { } class A { } class B : A, I { } void main() { alias BaseTypeTuple!(B) TL; writeln(typeid(TL)); // (A,I) を表示 }
- このクラスの全ての基底クラスを、降順の型タプルとして返します。
インターフェイスは含まれません。BaseClassesTuple!(Object) は空の型タプルになります。
Example:
import std.traits, std.typetuple, std.stdio; interface I { } class A { } class B : A, I { } class C : B { } void main() { alias BaseClassesTuple!(C) TL; writeln(typeid(TL)); // (B,A,Object) を表示 }
- このクラスや基底クラスの実装する全てのインターフェイスを並べた
型タプルを返します。複数回implementsされたインターフェイスでも
重複列挙されることはありません。InterfacesTuple!(Object)
は空の型タプルを返します。
Example:
import std.traits, std.typetuple, std.stdio; interface I1 { } interface I2 { } class A : I1, I2 { } class B : A, I1 { } class C : B { } void main() { alias InterfacesTuple!(C) TL; writeln(typeid(TL)); // (I1, I2) を表示 }
- クラス T の全ての基底クラスを降順に並べ、
その後ろにインターフェイスを並べた型タプルを返します。
TransitiveBaseTypeTuple!(Object)
は空の型タプルになります。
Example:
import std.traits, std.typetuple, std.stdio; interface I { } class A { } class B : A, I { } class C : B { } void main() { alias TransitiveBaseTypeTuple!(C) TL; writeln(typeid(TL)); // (B,A,Object,I) を表示 }
- 指定した型全ての暗黙変換先となれる型を返します。
例えば、さまざまな初期化値から配列を生成する場合などに役に立ちます。
空リストを渡したときや、共通の型が存在しない場合は void
を返します。
Example:
alias CommonType!(int, long, short) X; assert(is(X == long)); alias CommonType!(int, char[], short) Y; assert(is(Y == void));
- T.
からの暗黙変換先となりうる型全てのタプルを返します。
Important note:
このテンプレートが返す型のリストは、危険な変換を除いているため D 2.005 コンパイラが認めるものより保守的になっています。 例えば ImplicitConversionTargets!(double) には float は含まれません。
- T が組み込みの整数型かどうかを判定します。
- T が組み込みの浮動小数点数型かどうかを判定します。
- T が組み込みの数値型かどうかを判定します。
- T が組み込みの文字列型かどうかを判定します。
- T が組み込みの連想配列型かどうかを判定します。
- Tが静的配列かどうかを判定します。
- 型 T が動的配列型かどうかを判定します。
- 型 T が配列型かどうかを判定します。
- タプル T が式タプルかどうか判定します。
- T に対する unsigned 型を返します。
Tが整数型ではないばあい、コンパイルエラーになります。
- 型Tの書き換え可能版を返します
- 数値型Tの負の最小値を返します。
