Документация шаблона для 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 был структурой шаблона.
Итак, кто-нибудь знает, как я могу объявить и вызвать "конструктор шаблонов"?