10

Dのテンプレート ドキュメントには、「テンプレート コンストラクター」と呼ばれる小さなセクションが含まれています。そのセクションには、例や詳細なドキュメントはありません。

私はその機能を使用しようとしています (「静的コンストラクター」を使用できることはわかっていますが、テンプレート コンストラクターを好む理由があります)。

特に、コンパイル時にいくつかのハッシュを生成しようとしています。これが私の試みです:

struct MyHash
{
    uint value;

    this(uint value)
    {
        this.value = value;
    }

    this(string str)()
    {
        enum h = myHashFunc(str);
        return MyHash(h);
    }
}

uint myHashFunc(string s)
{
    // Hashing implementation
    return 0;
}

int main(string[] str)
{
    MyHash x = MyHash!"helloworld";
    return 0;
}

これは DMD 2.053 ではコンパイルできません:

x.d(10): Error: template x.MyHash.__ctor(string str) conflicts with constructor x.MyHash.this at x.d(5)

最初のコンストラクターについて文句を言います。それを削除した後:

x.d(20): Error: template instance MyHash is not a template declaration, it is a struct

私が使用する構文が MyHash がテンプレート構造である場合と同じであることを考えると、これはかなり論理的です。

それで、「テンプレートコンストラクター」を宣言して呼び出す方法を知っている人はいますか?

4

1 に答える 1

7

IRC で調べてみたところ、D1 では実装されていないことがわかったので、まだ実装されていないのではないかと推測しています。さらに、 The D Programming Languageには機能についての言及がないため、全体が少し宙に浮いています。

もし私があなたなら、ドキュメンテーションに対してバグを提出します。

于 2011-07-02T12:03:26.973 に答える