我的计划是用D语言编写一个无变量的代码,以便我的值可以在运行时使用。有人跟我谈过循环展开和编译时间代码的生成,但我不清楚如何做到这一点。我在下面制作了D模板,但是不能保证在编译时进行评估,因为在两个赋值语句(突变)上。建议将不胜感激。建议最好是D或C ++,不带宏。
import std.stdio;
import std.string;
import std.conv;
const char[] ALPHABET="ABFCDFRGHDSTHFG";
const string pattern="ABA";
I[C] computeAtCompileTime(S ,C,I)( const S pattern ){
I[C] table1;
const int size = to!int(pattern.length) ;//Length of the pattern to be matched
foreach( c; ALPHABET){ //Initialise array
table1[c] = size;
}
foreach(i; 0..size-1){
table1[pattern[i]] = size -i-1;
}
return table1;
}
enum TableFromCompiler = computeAtCompileTime!(const string ,char, int)(pattern);
void main(){
// enum TableFromCompiler = computeAtCompileTime!(const string ,char, int)(pattern);
writeln(TableFromCompiler);
}
答案 0 :(得分:1)
import std.stdio;
immutable char[] ALPHABET = "ABFCDFRGHDSTHFG";
int[char] compute(in string pattern)
{
int[char] table;
foreach (c; ALPHABET) {
table[c] = cast(int)pattern.length;
}
foreach (i, c; pattern) {
table[c] = cast(int)(pattern.length - i - 1);
}
return table;
}
void main()
{
enum table = compute("ABA");
writeln(table);
}
输出:
['A':0, 'B':1, 'C':3, 'D':3, 'F':3, 'G':3, 'H':3, 'R':3, 'S':3, 'T':3]