今天终于研究出了用递归模板实现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, V...)
5 {
6 public const char[] Result = S ~ Format!("%s foo%s;", T.stringof, N);
7 public enum { Index = N + 1 }
8 pragma(msg, Result ~ "\n");
9 static if(V.length > 0)
10 mixin GenVars!(Index, Result, V);
11 }
12
13 void main()
14 {
15
16 mixin(GenVars!(0, "", int, long, float).Result);
17 }
分享到:
相关推荐
c#学习笔记(1) ...(Microsoft后来在完全面向.NET框架的开发语言集中加入了Visual J#.NET,算是对Java语言用户的一种照顾。) 有人说,选择C#意味着选择MS(在中国的程序员当中,这并不是件值得自豪的事...
在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理...
编译及运行程序(模拟器下) ................................................................................................................ 7 编译及运行程序(PT80) ......................................
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...
a.8 声明变量的位置 a.9 const常量表达式 a.10 函数重载 a.11 运算符重载 附录b win32 api程序设计基础 b.1 api和sdk b.2 win32程序框架 b.3 win32 api程序框架分析 附录c com使用基础 c.1 什么是com对象 c.2 创建...
我们通常又将各二极与一个字节的 8 位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7), 相应 8 个发光二极管正好与单片机一个端口 Pn 的 8 个引脚连接,这样单片机就可以通过引脚输出高 低电平控制 8 个...
2.4.3 检测浏览器的语言 56 2.4.4 其他有用的ServerVariables集合的值 57 2.5 其他Request和Response技巧 57 2.5.1 连接、缓冲和页面重定向的管理 58 2.5.2 操作HTTP报头 60 2.5.3 使用客户证书 65 2.5.4 读写...
2.4.3 检测浏览器的语言 56 2.4.4 其他有用的ServerVariables集合的值 57 2.5 其他Request和Response技巧 57 2.5.1 连接、缓冲和页面重定向的管理 58 2.5.2 操作HTTP报头 60 2.5.3 使用客户证书 65 2.5.4 读写...