Использование CTFE для генерации множества псевдонимов структур
Скажи у меня класс
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 для генерации этих псевдонимов во время компиляции?
Или это только для оценки функций?
/ Пер
1 ответ
Решение
Вы всегда можете сделать это как миксин.
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...)); в какой-то момент и сделать это.
При отладке функции вы можете просто запустить ее во время выполнения и написать (thatFunction ()), чтобы увидеть, какой код она генерирует.