为什么在代码中编译时结构未知?

时间:2015-08-13 12:00:16

标签: struct d template-meta-programming compile-time

我想知道如何更改下面的代码,以便在编译时计算bmBc。下面的一个适用于运行时,但它并不理想,因为我需要在编译时知道bmBc表。我可以理解如何改进这方面的建议。

   import std.conv:to;
   import std.stdio;

    int [string]  bmBc;
    immutable string pattern = "GCAGAGAG";
    const int size = to!int(pattern.length);
    struct king {

            void  calculatebmBc(int i)()
            {
                    static if ( i < size -1 )
                           bmBc[to!string(pattern[i])]=to!int(size-i-1);

                  //        bmBc[pattern[i]] ~= i-1;

                    calculatebmBc!(i+1)();
            }
            void calculatebmBc(int i: size-1)() {

            }
    }

    void main(){
      king myKing;

      const  int start = 0;
      myKing.calculatebmBc!(start)();
     //1.   enum  bmBcTable =  bmBc;

    }

1 个答案:

答案 0 :(得分:1)

变量bmBcbmh无法在编译时读取,因为您将它们定义为常规运行时变量。

您需要将它们定义为enum或可能immutable,以便在编译时读取它们,但这也意味着您无法在初始化后修改它们。您需要重构代码以返回值而不是使用out参数。

或者,您可以在运行时在模块构造函数内初始化它们。