タイル投げ:TypeTupleの簡単なアルゴリズム


D言語のTypeTupleは配列で操作できる以上、より多くのアルゴリズムを追加できると思います.次のRemoveIfが例です.
 1 module dust.meta.tuple;
2
3 import std.typetuple;
4
5
6 template RemoveIf(alias PredTempl, TList...)
7 {
8 static if (TList.length == 0)
9 alias TList RemoveIf;
10 else static if (PredTempl!(TList[0]))
11 alias RemoveIf!(Size, TList[1 .. length]) RemoveIf;
12 else
13 alias TypeTuple!(TList[0], RemoveIf!(Size, TList[1 .. length])) RemoveIf;
14 }
15
16 template Foreach(alias PredTempl, TList...)
17 {
18 static if(TList.length == 0)
19 alias TList Foreach;
20 else
21 {
22 private alias PredTempl!(TList[0]) Dummy_;
23 alias Foreach!(PredTempl, TList[1 .. length]) Foreach;
24 }
25 }
26
27
28 template Size(T)
29 {
30 const bool Size = T.sizeof == char.sizeof;
31 }
32
33 template Print(T)
34 {
35 const int Print = 0;
36 pragma(msg, T.stringof);
37 }
38
39 void main()
40 {
41 alias TypeTuple!(int, long, char) T;
42 alias RemoveIf!(Size, T) T2;
43 alias Foreach!(Print, T2) forEach;
44
45 }
このRemoveIfテンプレートの効果はC++STLのremove_とほぼ同じですif同様に,PredTempl,RemoveIfが最終的に処理されたTypeTupleという述語を提供する.同様にsort,uniqueなどのアルゴリズムも実現でき,TypeTupleの使用に便利である.