2

说我有课

struct Vector (ElementType, uint Dimension) { ... }

用这些速记表示一个固定维度的向量

alias Vector!(float, 2) vec2;
alias Vector!(float, 3) vec3;
alias Vector!(float, 4) vec4;
alias Vector!(double, 2) vec2d;
alias Vector!(double, 3) vec3d;
alias Vector!(double, 4) vec4d;
alias Vector!(int, 2) vec2i;
alias Vector!(int, 3) vec3i;
alias Vector!(int, 4) vec4i;

我可以以某种方式使用 D 的功能在编译时生成这些别名吗?

还是只是为了评估功能?

/每

4

1 回答 1

4

你总是可以把它作为一个 mixin 来做。

string makeAliases() {
   string code;
   import std.conv;

   foreach(type; ["float", "double", "int"])
   foreach(n; 2 .. 5)
      code ~= "alias Vector!("~type~", " ~ to!string(n) ~ ") vec" ~   to!string(n) ~ type[0] ~ ";\n";

  return code;
}

mixin(makeAliases());

通常,如果您创建一个构建代码字符串的编译时可评估函数,则可以使用 mixin(thatFunction(args...)); 在某个时候并让它发生。

调试该函数时,您可以在运行时运行它并 writeln(thatFunction()) 以查看它生成的代码。

于 2013-08-31T21:32:09.763 回答