`
oldrev
  • 浏览: 233770 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论
文章列表
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[
在火星新闻组上有人建议把D语言改名为Diamond,以期吸引公众更多的关注。俺也非常同意这个想法,毕竟 diamond 比 ruby,pe(a)rl 值钱得多 :)
在火星新闻组上有人建议把D语言改名为Diamond,以期吸引公众更多的关注。俺也非常同意这个想法,毕竟 diamond 比 ruby,pe(a)rl 值钱得多 :)
今晚无聊,完整用D实现了Boost.Variant 的绝大部分,权当娱乐了。 1 // Module: variant.d 2 // Author: Oldrev (wstring#AT#gmail.com) 3 // License: BSD 4 5 module dust.meta.variant; 6 7 import std.typetuple; 8 import std.traits; 9 10 private template MaxSizeImp(T, V...) 11 { 12 static if(V.length > 0)
今晚无聊,完整用D实现了Boost.Variant 的绝大部分,权当娱乐了。 1 // Module: variant.d 2 // Author: Oldrev (wstring#AT#gmail.com) 3 // License: BSD 4 5 module dust.meta.variant; 6 7 import std.typetuple; 8 import std.traits; 9 10 private template MaxSizeImp(T, V...) 11 { 12
今天终于研究出了用递归模板实现D语言编译时字符串连接的方法,我实在是高兴得不得了。其实方法很简单,一点就破,下面的代码很好的说明了问题,在编译时16行会在 main() 函数体内添加三个变量,分别是:int foo0, long foo1, float foo2。用这种方法甚至可以在编译期为类添加成员函数、变量、类型定义等等,反正只要是符合语法的就可以,不像 mixin template 有那么多的限制。 1 import std.metastrings; 2 import std.stdio; 3 4 private template GenVars(int N, char[] S, T, ...
今天终于研究出了用递归模板实现D语言编译时字符串连接的方法,我实在是高兴得不得了。其实方法很简单,一点就破,下面的代码很好的说明了问题,在编译时16行会在 main() 函数体内添加三个变量,分别是:int foo0, long foo1, float foo2。用这种方法甚至可以在编译期为类添加成员函数、变量、类型定义等等,反正只要是符合语法的就可以,不像 mixin template 有那么多的限制。 1 import std.metastrings; 2 import std.stdio; 3 4 private template GenVars(int N, char[] S, T, ...
昨天夜里我把我自己写的DLL包装类代码贴到了D语言新闻组里,没想到 tango库(准标准库,类似C++的Boost)开发小组的Kris Bell问我是否愿意把代码捐献给tango库,还说什么呢,当然是一千个愿意,一万个愿意啦!
昨天夜里我把我自己写的DLL包装类代码贴到了D语言新闻组里,没想到 tango库(准标准库,类似C++的Boost)开发小组的Kris Bell问我是否愿意把代码捐献给tango库,还说什么呢,当然是一千个愿意,一万个愿意啦!
今天晚上在牺牲了N^N个脑细胞之后,终于实现了上一帖所设想的DLL包装类(把Proc换成Symbol),源程序已经通过了编译,可以运行,当然还不够强壮。大半夜的趁着这股热乎劲,贴上来玩玩。 1 import std.c.windows.windows; 2 import std.stdio; 3 import std.traits; 4 import std.string; 5 import std.utf; 6 7 struct Symbol(char[] SymName, Ret, Params...) 8 { 9 alias Params Para ...
今天晚上在牺牲了N^N个脑细胞之后,终于实现了上一帖所设想的DLL包装类(把Proc换成Symbol),源程序已经通过了编译,可以运行,当然还不够强壮。大半夜的趁着这股热乎劲,贴上来玩玩。 1 import std.c.windows.windows; 2 import std.stdio; 3 import std.traits; 4 import std.string; 5 import std.utf; 6 7 struct Symbol(char[] SymName, Ret, Params...) 8 { 9 alias Params Para ...
今天早上突发奇想,想用D语言新增加的mixin和可变参数模板来封装Windows的DLL,结果奋斗了一天也没有结果。我原先设想的是达到类似如下伪码的水平:1 //Module 模板第一个参数是DLL路径名,后跟不限个数 Proc 模板。Proc用于定义一 ...
今天早上突发奇想,想用D语言新增加的mixin和可变参数模板来封装Windows的DLL,结果奋斗了一天也没有结果。我原先设想的是达到类似如下伪码的水平:1 //Module 模板第一个参数是DLL路径名,后跟不限个数 Proc 模板。Proc用于定义一 ...
D语言教主 Walter Bright 今天放出了 DMD 1.006 编译器!最主要的更新是添加了一个叫做编译时执行函数(Compile Time Execution of Functions)的功能,顾名思义,就是在编译时对符合要求的函数进行求值。这是一个非常有用的特性,以前当我们要在编译时(也就是“元编程”)进行一点稍微负载的常数计算时,往往需要用晦涩的递归模板来进行,不仅功能非常有限而且代码非常难以理解(还记得那个在编译器的出错信息中输出计算结果的C++程序吗?)。现在有了这个功能,我们可以在编译时进行包括递归和循环在内的复杂计算了,换就话说就是DMD编译器初步具有了编译时解释执行D语言 ...
D语言教主 Walter Bright 今天放出了 DMD 1.006 编译器!最主要的更新是添加了一个叫做编译时执行函数(Compile Time Execution of Functions)的功能,顾名思义,就是在编译时对符合要求的函数进行求值。这是一个非常有用的特性,以前当我们要在编译时(也就是“元编程”)进行一点稍微负载的常数计算时,往往需要用晦涩的递归模板来进行,不仅功能非常有限而且代码非常难以理解(还记得那个在编译器的出错信息中输出计算结果的C++程序吗?)。现在有了这个功能,我们可以在编译时进行包括递归和循环在内的复杂计算了,换就话说就是DMD编译器初步具有了编译时解释执行D语言 ...
Global site tag (gtag.js) - Google Analytics