2013-08-31 1 views
2

Dire que j'ai une classeEn utilisant CTFE pour générer ensemble des alias struct

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

représentant un vecteur fixe dimensions avec ces sténographies

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; 

puis-je utiliser une certaine façon les caractéristiques de D à génère ces alias dans la compilation?

Ou est-ce juste pour l'évaluation des fonctions?

/Per

Répondre

4

vous pouvez toujours le faire comme 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()); 

En général, si vous faites une compilation fonction évaluable qui construit une chaîne de code, vous pouvez alors mixin (thatFunction (args ...)); à un moment donné et y arriver.

Lorsque la fonction de débogage, il vous suffit de l'exécuter à l'exécution et writeln (thatFunction()) pour voir ce que le code qu'il génère.

+0

Fantastique! THX. –

Questions connexes