D 1.0   D 2.0
About Japanese Translation

Last update Thu Sep 16 11:26:02 2010

std.typetuple

型タプル(型リストとも呼ばれる)を操作するためのテンプレートです。

型タプルに対する操作のうちいくつかは、言語組み込みとなっています。 例えばタプルの n 番目の型を取り出す TL[n] や、 元の型タプルのスライスを新しく取り出す TL[lwr .. upr] などがあります。

References:
Modern C++ Design, Andrei Alexandrescu (Addison-Wesley Professional, 2001) (※訳注: 邦訳あり) の表3.1のアイデアに基づいています

Source:
std/typetuple.d

License:
Boost License 1.0.

Authors:
Walter Bright

template TypeTuple(TList...)
ゼロ個以上の型の型タプルを作成します

Example:
 import std.typetuple;
 alias TypeTuple!(int, double) TL;

 int foo(TL td)  // int foo(int, double); と同じ
 {
    return td[0] + cast(int)td[1];
 }


Example:
 TypeTuple!(TL, char)
 // これは次と同等
 TypeTuple!(int, double, char)


template staticIndexOf(T,TList...)
template staticIndexOf(alias T,TList...)
ゼロ個以上の型の列 TList のなかで、最初に型 T が現れたインデックスを返します。 見つからなかった場合は -1 を返します。

Example:
 import std.typetuple;
 import std.stdio;

 void foo()
 {
    writefln("The index of long is ",
          staticIndexOf!(long, TypeTuple!(int, long, double)));
    // 出力: The index of long is 1
 }


alias IndexOf;
後方互換性のために残されています(indexOfの別名です)

template Erase(T,TList...)
template Erase(alias T,TList...)
TList から作られる型タプルから、 型 T の最初の出現を(もしあれば)除いたものを返します。

Example:
 Erase!(long, int, long, double, char)
 // 以下に同じ
 TypeTuple!(int, double, char)


template EraseAll(T,TList...)
template EraseAll(alias T,TList...)
TList から作られる型タプルから、 型 T の最初の出現をすべて除いたものを返します。

Example:
 alias TypeTuple!(int, long, long, int) TL;

 EraseAll!(long, TL)
 // 以下に同じ
 TypeTuple!(int, int)


template NoDuplicates(TList...)
TListから重複を全て除いた 型タプルを返します。

Example:
 alias TypeTuple!(int, long, long, int, float) TL;

 NoDuplicates!(TL)
 // 以下に同じ
 TypeTuple!(int, long, float)


template Replace(T,U,TList...)
template Replace(alias T,U,TList...)
template Replace(T,alias U,TList...)
template Replace(alias T,alias U,TList...)
TList内の型Tの最初の出現(もしあれば)を型Uに置き換えて作った 型タプルを返します。

Example:
 alias TypeTuple!(int, long, long, int, float) TL;

 Replace!(long, char, TL)
 // 以下に同じ
 TypeTuple!(int, char, long, int, float)


template ReplaceAll(T,U,TList...)
template ReplaceAll(alias T,U,TList...)
template ReplaceAll(T,alias U,TList...)
template ReplaceAll(alias T,alias U,TList...)
TList内の型Tの出現をすべて型Uに置き換えて作った 型タプルを返します。

Example:
 alias TypeTuple!(int, long, long, int, float) TL;

 ReplaceAll!(long, char, TL)
 // 以下に同じ
 TypeTuple!(int, char, char, int, float)


template Reverse(TList...)
TList の順番を逆転させた型タプルを作って返します。

Example:
 alias TypeTuple!(int, long, long, int, float) TL;

 Reverse!(TL)
 // 以下に同じ
 TypeTuple!(float, int, long, long, int)


template MostDerived(T,TList...)
TList の要素のうち、型 T からもっとも深く派生した型を返します。 Tの派生型が見つからなかったときは T 自身を返します。

Example:
 class A { }
 class B : A { }
 class C : B { }
 alias TypeTuple!(A, C, B) TL;

 MostDerived!(Object, TL) x;  // xは型Cと宣言される


template DerivedToFront(TList...)
派生クラスより基底クラスが必ずうしろにくるような順序で TList をソートした型タプルを返します。

Example:
 class A { }
 class B : A { }
 class C : B { }
 alias TypeTuple!(A, C, B) TL;

 DerivedToFront!(TL)
 // 以下に同じ
 TypeTuple!(C, B, A)

template staticMap(alias F,T...)
TypeTuple!(F[T[0]], F[T[1]], ..., F[T[$ - 1]]) へと評価される

Example:
alias staticMap!(Unqual, int, const int, immutable int) T;
static assert(is(T == TypeTuple!(int, int, int)));

template allSatisfy(alias F,T...)
F[T[0]] && F[T[1]] && ... && F[T[$ - 1]] へと評価される

Example:
static assert(!allSatisfy!(isIntegral, int, double));
static assert(allSatisfy!(isIntegral, int, long));

template anySatisfy(alias F,T...)
F[T[0]] || F[T[1]] || ... || F[T[$ - 1]] へと評価される

Example:
static assert(!anySatisfy!(isIntegral, string, double));
static assert(anySatisfy!(isIntegral, int, double));