Как использовать «Конструкторы шаблонов» в D?

В документации по шаблону для 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

Что довольно логично, учитывая, что синтаксис I использование будет таким же, как если бы MyHash был структурой шаблона.

Итак, кто-нибудь знает, как я могу объявить и вызвать «конструктор шаблона»?

10
задан dprogramminglanguagedisposable 1 July 2011 в 22:54
поделиться