Ich habe den folgenden Code in D:Wie kann ich unveränderliche Referenztypen ohne Break Constance zurückgeben?
import std.stdio;
import std.container.array;
class RefType { }
class MyContainer {
private Array!RefType test;
RefType result() const { // I want const on this, not on return type
return test[0]; // use opIndex() from Array(T)
// Error: cannot implicitly convert expression (this.test.opIndex(0u))
// of type const(RefType) to main.RefType
}
}
int main(string[] argv) {
auto c = new MyContainer; auto r = c.result(); return 0;
}
Wie man sehen kann ich einen Referenztyp aus einer benutzerdefinierten Containerklasse zurückkehren möchten. Aber der opIndex() von Array gibt nicht die Erlaubnis, das zu tun, warum?
Ich denke, dass opIndex()
eine RefType
anstelle eines const(RefType)
Wert zurückgeben sollte, weil das Array Array!RefType
ist.
Ist das ein Fehler? oder ist die Designabsicht? Wenn dies das geplante Design ist, wie bekomme ich das, was ich will?
versuchen, ersetzen Sie Ihre 'const' mit' inout'.so 'inout (RefType) result() inout {Rückgabetest [0]; } 'und sehen, ob das für Sie funktioniert –
Ja, das funktioniert! Aber was bedeutet das Inout-Schlüsselwort? –
Ich habe getestet und nicht bricht die constness :) Bitte füllen Sie es als Antwort. Es ist nur ich fand. –