Предположит, у меня есть следующая структура:Как вызвать собственный конструктор struct со всеми аргументами, имеющими значения по умолчанию?
import std.stdio;
struct A
{
this (int arg = 1) {
writeln("Correct constructor");
}
this();
}
Как использовать значение по умолчанию конструктора?
void main()
{
A a = A();
}
... производит Error: constructor app.A.this is not callable because it is annotated with @disable
. Если я удалю атрибут @disable
из конструктора по умолчанию, я бы не получил свой собственный конструктор.
И почему структурам не разрешено иметь настраиваемый конструктор по умолчанию?
Это похоже на работу. Насколько обманывает это? Должен ли я ожидать каких-либо побочных эффектов? Например. Я заметил, что, когда я заменяю строку main на 'A a = A.init', статический opCall не вызван, но это не проблема со мной. –
@AdamRyczkowski: моя главная проблема заключалась в том, что с этим подходом не существует '.__ ctor', что может помешать некоторым методам интроспекции. Я, честно говоря, не очень много разбираюсь в «статическом opCall», но я подозреваю, что он будет отлично работать для большинства случаев использования. – Cauterite
Кроме того, как вы отметили, '.init' никогда не будет вызывать функцию, поскольку он компилируется в простой« mov »или« rep movs »(x86) для записи значений по умолчанию. – Cauterite