2007-03-02
抛砖:TypeTuple 的简单算法
关键字: D 元编程
D语言的 TypeTuple既然可以按数组的方式操作,我觉得应该可以对其增加更多的算法,下面的 RemoveIf就是一个例子:
这个RemoveIf模板的效果几乎和C++ STL 中的 remove_if 一样,提供一个谓词:PredTempl,RemoveIf最终得到处理后的TypeTuple。类似还可以实现 sort,unique等等算法,方便 TypeTuple的使用。
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的使用。
发表评论
- 浏览: 105135 次
- 性别:

- 来自: 昆明

- 详细资料
搜索本博客
我的相册
Screenshot
共 1 张
共 1 张
最近加入圈子
最新评论
-
出色的开源项目管理软件— ...
我也是前几天刚刚从trac换到redmine,感觉好多了,trac有的redmi ...
-- by danielking -
转贴:鲁迅未收入全集的文 ...
借问酒家何处有,牧童遥指杏花村
-- by hqs7636 -
Range Coding 的 D 实现
引用oldrev 2008-01-12LZMA SDK 只是一个 LZMA 算法 ...
-- by oldrev -
D 静态数组初始化大bug
看看日期好伐?
-- by oldrev -
D新闻组里的天才代码
没看过产生的汇编代码,测试了是可行的。如果用宏来实现就完美了
-- by oldrev






评论排行榜