У меня есть следующий код в D:Как вернуть возвращаемые ссылочные типы без разрыва?
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;
}
Как вы можете видеть, что я хочу, чтобы вернуть ссылочный тип из пользовательского класса контейнера. Но opIndex() из массива не дает разрешения на это, почему?
Я думаю, что opIndex()
должен возвращать RefType
вместо значения const(RefType)
потому, что массив является Array!RefType
.
Это ошибка? или намерение проекта? Если это намеренный дизайн, как я могу получить то, что хочу?
попробуйте заменить 'const'' inout'.поэтому 'inout (RefType) result() inout {return test [0]; } 'и посмотреть, работает ли это для вас –
Да, это работает! но в чем смысл ключевого слова inout? –
Я тестировал и не нарушал константу :), пожалуйста, заполните ее как ответ. Это просто я нашел. –