2013-08-25 2 views
2

Каков самый умный способ реализации фиксированного размера в векторе D, который совместим с RandomAccessRangeinterface в Phobos? Должен ли я переопределить всех членов opIndex, length и т. Д. Или это более умный путь через делегирование, псевдоним этого или шаблона mixins? Я рассматривал пару векторных структур фиксированного размера для проектов github D, но ни один из них не заботится о том, чтобы быть совместимым с диапазонами Phobos. Обновление: Только что прочитано, что контейнеры должны быть ссылочными типами, поэтому я думаю, что это не способ сделать это в D правильно?Фобос-диапазон Совместимый фиксированный вектор

+1

Соглашение в std.container заключается в том, что 'opSlice() 'используется для получения диапазона, по которому вы можете выполнять итерацию, какой тип диапазона зависит от вас –

ответ

2

Если вектор имеет непрерывную внутреннюю память, то вы можете просто вернуть кусочек, что данные из opSlice():

struct Vector 
{ 
    private real[4] data; 

    auto opSlice() { return data[]; } 
} 

Контейнеры не должны быть ссылочные типы, но в любом случае с помощью opSlice является обычным способом для получения диапазона из контейнера.

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