...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

関数テンプレートと無名関数

D 0.161
Jun 19, 2006
New/Changed Features

  • Added opIn_r operator overload.
  • Function return types for lambda delegates can now be inferred.
  • delegate keyword now optional for lambda delegates.
  • Shadowing local variable declarations is now deprecated.
  • New function template syntax.

久々に熱い更新!
っていっても分かる人がいないー! ・゚・(ノД`)・゚・

とにかく今回の更新で関数周りがかなり強化されて,関数テンプレートと無名関数が使いやすくなった.
関数テンプレートの書き方があまりに冗長だったので変更されるだろうと思っていたら,変更方法も予想通りだった.
まあ,これしかないよなあ.
C++ での <> が () になっただけだと思えばそんなに違和感もないし.
いいねぇいいねぇー,この調子で頑張れー!


import std.cstream;
 
// 従来の関数テンプレートの書き方は長かった
// template burst(T,F)
// {
// void burst(T[] v, F f)
// {
// foreach(T e; v)
// {
// f(e);
// }
// }
// }
 
// 省略できるようになった
// テンプレートパラメータは関数名の後に書く
void burst(T,F)(T[] v, F f)
{
foreach(T e; v)
{
f(e);
}
}
 
void main()
{
const int v[] = [1,2,3,4,5];

// 従来の無名関数の書き方
// 暗黙のインスタンス化は従来から使用可能
// burst( v, delegate void(int e){ dout.writefln(e); } );

// 戻り値型とdelegateキーワードを省略できるようになった
burst( v, (int e){ dout.writefln(e); } );
}