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 がテンプレート構造である場合と同じであることを考えると、これはかなり論理的です。
それで、「テンプレートコンストラクター」を宣言して呼び出す方法を知っている人はいますか?