D 1.0   D 2.0
About Japanese Translation

Last update Thu Feb 17 14:20:06 2011

std.conv

値をある型から他の型へと変換する何でも屋です。

Source:
std/conv.d

Copyright:
Copyright Digital Mars 2007-.

License:
Boost License 1.0.

Authors:
Walter Bright, Andrei Alexandrescu, Shin Fujishiro, Adam D. Ruppe

class ConvException: object.Exception;
deprecated alias ConvError;
変換の際にエラーが起きたときに投げられる例外です。

class ConvOverflowException: std.conv.ConvException;
deprecated alias ConvOverflowError;
変換時にオーバーフローが起きたときの例外です。

template to(T)
適切な変換プリミティブへと処理を渡すエントリポイントです。 呼び出す際には通常はto!TargetType(value) という形で使います。 (直接 toImpl を呼ぶことはありません)

T toImpl(T, S)(S s);
文字列から文字列への変換は、以下の文字型からなり (char, wchar, dchar) 以下の修飾子 (mutable, const, immutable) のついた任意の組み合わせについて、可能です。

Example:
char[] a = "abc";
auto b = to!dstring(a);
assert(b == "abc"w);

T toImpl(T, S)(S s, in T leftBracket = "[", in T separator = ", ", in T rightBracket = "]");
(文字列以外の)配列を文字列に変換します。 左括弧、区切り文字、右括弧はカスタマイズ可能です。 それぞれ指定された値が to!T で文字列化され使われます。

T toImpl(T, S)(S s, in T leftBracket = "[", in T keyval = ":", in T separator = ", ", in T rightBracket = "]");
連想配列から文字列への変換です。 左括弧、区切り文字、キーと値の区切り文字、右括弧はカスタマイズ可能です。 それぞれ指定された値が to!T で文字列化され使われます。

T toImpl(T, S)(S s, in T nullstr = "null");
オブジェクトから文字列への変換です。非nullならば toStringメソッドを呼び出し、 nullならば nullstr を返します。

T toImpl(T, S)(S s);
構造体から文字列への変換です。 toString が定義されていれば呼び出します。

T toImpl(T, S)(S s, in T left = S.stringof ~ "(", in T separator = ", ", in T right = ")");
toString を持たない構造体に対する、 フィールドの一覧表示を文字列化する処理です。

T toImpl(T, S)(S s);
列挙型は、その定義時の記号名の文字列に変換されます。

T toImpl(T, S)(S s, in T left = S.stringof ~ "(", in T right = ")");
typedef で定義された型は Type(value) 形式で文字列化されます。

Target toImpl(Target, Source)(Source value);
Source型がTarget型に暗黙変換可能ならば、to は単に暗黙変換と同じ処理を実行します。

T toImpl(T, S)(S b);
bool値は "true""false" と表示されます。

T toImpl(T, S)(S value);
Sがワイド文字だった場合、 まずnarrow文字に変換したあと解析が行われます。

T toImpl(T, S)(S value);
Sがnarrow文字の場合は、通常の文字列解析が行われます。

T toImpl(T, S)(S value);
Sourceが非nullでTargetがnullの場合、 オブジェクトからオブジェクトへの変換は例外を発生します。

T toImpl(T, S)(S value);
SourceがオブジェクトでTargetがそうでない場合、変換は Source オブジェクトの "to" メソッドを使います。

Example:
class Date
{
    T to(T)() if(is(T == long))
    {
        return timestamp;
    }
    ...
}

unittest
{
    debug(conv) scope(success) writeln("unittest @", __FILE__, ":", __LINE__, " succeeded.");
    auto d = new Date;
    auto ts = to!long(d); // d.to!long() と同じ
}

T toImpl(T, S)(S value);
数値型から数値型への定義域を狭める変換の場合、 値がTargetの範囲を超えていると例外が発生します。

T toImpl(T, S)(S src);
配列から配列への変換(Targetが文字列型の場合を除く) は、to で再帰的に要素をひとつずつ変換します。

T toImpl(T, S)(S src);
連想配列から連想配列への変換は、 キーと値をそれぞれひとつずつ再帰的にtoで変換します。

template roundTo(Target)
浮動小数点数から整数への丸め変換です。

Example:
  assert(roundTo!(int)(3.14) == 3);
  assert(roundTo!(int)(3.49) == 3);
  assert(roundTo!(int)(3.5) == 4);
  assert(roundTo!(int)(3.999) == 4);
  assert(roundTo!(int)(-3.14) == -3);
  assert(roundTo!(int)(-3.49) == -3);
  assert(roundTo!(int)(-3.5) == -4);
  assert(roundTo!(int)(-3.999) == -4);
変換先が整数型でない場合は動作しません。

Target parse(Target, Source)(ref Source s);
Target parse(Target, Source)(ref Source s, uint radix);
parse 関数は to とよく似た動作をします。違いは (1) 入力として文字列のみを受け取る (2) 文字列を参照で受け取り、 変換で読み込んだ分先に進める (3) 全体を変換できなかったとしても例外を投げない、の3点です。 オーバーフローが起きたり、 1文字も読み取れなかった場合などは 依然として例外が発生します。

Example:
string test = "123 \t  76.14";
auto a = parse!(uint)(test);
assert(a == 123);
assert(test == " \t  76.14"); // パースした残り
munch(test, " \t\n\r"); // ホワイトスペースをスキップ
assert(test == "76.14");
auto b = parse!(double)(test);
assert(b == 76.14);
assert(test == "");

Target parse(Target, Source)(ref Source s);
一文字文字列から読み込んで返し、 文字列は1つ先に進めます

Target parse(Target, Source)(ref Source s, dchar lbracket = '[', dchar rbracket = ']', dchar comma = ',');
配列を表した文字列を、左括弧 (デフォルトは '[') と右括弧 (デフォルトは ']') と区切り文字 (デフォルトでは ',') を指定して読み込みます。

T toImpl(T, S)(S value);
小さな符号無し整数から文字列への変換です。

T toImpl(T, S)(S value);
小さな符号つき整数から文字列への変換です。

T toImpl(T, S)(S input);
符号無し整数 (uint と ulong).

T toImpl(T, S)(S c);
char, wchar, dchar から文字列型への変換です。

T toImpl(T, S)(S value);
符号付き値 (intlong).

T toImpl(T, S)(S s);
C形式文字列

T toImpl(T, S)(S f);
float から任意の文字列型

T toImpl(T, S)(S d);
double から任意の文字列型

T toImpl(T, S)(S r);
real から任意の文字列型

T toImpl(T, S)(S f);
ifloat から任意の文字列型

T toImpl(T, S)(S d);
idouble から任意の文字列型

T toImpl(T, S)(S r);
ireal から任意の文字列型

T toImpl(T, S)(S f);
cfloat から任意の文字列型

T toImpl(T, S)(S d);
cdouble から任意の文字列型

T toImpl(T, S)(S r);
creal から任意の文字列型

T toImpl(T, S)(S value, uint radix);
T toImpl(T, S)(S value, uint radix);
値をradix進数表現で文字列に変換します。

radixは2から36までの値を指定できます。 valueradixが10の時のみ符号付きの値として扱われます。 11~36進数表現では A から Z までの文字が使用されます。

T toImpl(T, S)(S value);
ポインタを size_t の値として文字列化します。

string text(T...)(T args);
wstring wtext(T...)(T args);
dstring dtext(T...)(T args);
指定した任意の引数列を文字列に変換する、 便利な関数です。

Example:
   assert(text(42, ' ', 1.5, ": xyz") == "42 1.5: xyz");
   assert(wtext(42, ' ', 1.5, ": xyz") == "42 1.5: xyz"w);
   assert(dtext(42, ' ', 1.5, ": xyz") == "42 1.5: xyz"d);

int octal(string num)();
long octal(string num)();
uint octal(string num)();
ulong octal(string num)();
template octal(alias s) if (isIntegral!(typeof(s)))
これらの関数は、 '0' で始まる8進リテラルは間違えやすいため、 ライブラリ関数で置き換えようという実験的な機能です。octal!177 あるいは octal!"177" は、現在の8進整数リテラル 0177 の代わりに使うことができ、 より視覚的にわかりやsくなります。この実装が普及すれば、 将来のバージョンの D 言語では8進整数リテラルは廃止されるかもしれません。

文字列の規則はリテラルの場合と同じです。 int に収まる値ならば int 型となり、それ以外では long 型になります。 ユーザーが接尾辞 Llong 型を強制すれば、 常に long になります。接尾辞 U または u があると、符号無し整数型になります。 整数から作った8進リテラルは、渡された整数の型を引き継ぎます。

Example:
// 0177 とおなじ
auto x = octal!177;
// octal はコンパイル時実行
enum y = octal!160;
// unsigned octal
auto z = octal!"1_000_000u";

T* emplace(T, Args...)(void[] chunk, Args args);
渡された生メモリ領域 chunk のアドレスに非クラス型 T のオブジェクトを構築します。コンストラクタには引数 Args が渡ります。chunk は少なくとも T が必要とする以上のサイズが必要で、アラインメントは T のアラインメントの倍数となっていなければいけません。

この関数は対応するコンストラクタが @safe ならば @trusted となれます。

Returns:
新規作成されたオブジェクトへのポインタ。

T* emplace(T, Args...)(T* chunk, Args args);
一つ上の emplace に似ていますが、 型 T の未初期化オブジェクトへのポインタを取る点が違います。 このオーバーロードは、例えば、T variable = void とした変数の初期化などに使えます。

Returns:
新規作成されたオブジェクトへのポインタ。

T emplace(T, Args...)(void[] chunk, Args args);
渡された生メモリ領域 chunk のアドレスにクラス型 T のオブジェクトを構築します。コンストラクタには引数 Args が渡ります。chunk は少なくとも T が必要とする以上のサイズが必要で、アラインメントは T のアラインメントの倍数となっていなければいけません。 (クラスインスタンスのサイズはThe size _traits(classInstanceSize, T) で得られます).

この関数は対応するコンストラクタが @safe ならば @trusted となれます。

Returns:
新規作成されたオブジェクトへのポインタ。