2015-06-16 3 views
1

У меня есть код, который работает, и я не уверен, почему. Я создаю класс как неизменяемую переменную. В классе нет конструкторов immutable, и ни один из них не обозначен как pure, но он просто работает в любом случае.Чистые конструкторы в шаблонах классов

Я также читал, что pure конструкторы могут быть использованы повсеместно для изменчивого, неизменного, сопзЬ, и общие экземпляры

Единственное, что я могу найти на веб-сайте D является то, что чистота выводится в шаблонах функций. Должен ли я предполагать, что, поскольку мой класс параметризуется (или шаблон класса), что компилятор выводит чистоту всех методов, включая конструктор?

код ниже:

public class Data(size_t numInputs, size_t numTargets) 
{ 
    ... 
    public this(in double[][] data, in bool[] filter, in bool doNorm = true) 
    { 
    ... 
    } 
} 

ответ

2

Единственное, что я могу найти на веб-сайте D является то, что чистота выводится в шаблонах функций. Должен ли я предполагать, что, поскольку мой класс параметризуется (или шаблон класса), что компилятор выводит чистоту всех методов, включая конструктор?

Да. Поскольку класс является шаблоном, все методы также являются шаблонами (учтите, что они должны быть, поскольку скрытый тип параметра this поступает из шаблона). Таким образом, их тело должно быть доступно в источнике. Два требования для выводимых атрибутов - это источник тела и параметр шаблона для них (а также функция не должна пытаться вызывать или проверять себя, но вы этого не делаете), поэтому ее можно вывести как чистую.

Смежные вопросы