Подтвердить что ты не робот

Как использовать "Конструкторы шаблонов" в 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

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

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

4b9b3361

Ответ 1

Я спросил в IRC, и, насколько мы можем понять, он никогда не был реализован для D1, поэтому мы предполагаем, что он все еще не реализован. Кроме того, нет упоминания о функции на языке программирования D, поэтому все это немного в воздухе.

Если бы я был вами, я бы представить ошибку в отношении документации.