я очень люблю dispatch_data_t
, Он предоставляет полезную абстракцию поверх диапазона памяти: он обеспечивает подсчет ссылок, позволяет потребителям создавать произвольные поддиапазоны (которые участвуют в подсчете ссылок родительского диапазона), объединять поддиапазоны и т. Д. (Я выиграл ‘ не вдавайтесь в подробности — документы прямо здесь: Управление объектами данных отгрузки)
Я пытался выяснить, есть ли эквивалент в C ++ 11, но термины «диапазон», «память» и «подсчет ссылок» довольно общие, что делает поиск в этом вопросе немного сложным. Я подозреваю, что тот, кто проводит больше времени со стандартной библиотекой C ++, чем я, может знать об этом.
Да, я знаю, что могу использовать dispatch_data_t
API из кода C ++, и да, я знаю, что было бы нетрудно получить наивную реализацию первого прохода такого рода вещи, но я специально ищу что-то идиоматическое для C ++ и с высокой степенью полировки / надежность. (Может быть, повысить?)
Нет.
Представления диапазона предлагаются для будущих пересмотров стандартов, но они не являются собственниками.
dispatch_data_t
тесно связан с GCD, так как очистка происходит в указанной очереди, определенной при создании: для дублирования этого поведения нам потребуются пулы потоков и очереди в std
, которого у нас нет.
Как вы заметили, владение перекрывающимся типом неизменяемого диапазона в разреженной или смежной памяти не составит труда записать. Полностью готовый, он должен будет поддерживать распределители, какую-то необработанную систему входных буферов (стирание типа в механизме владения / уничтожения?), Иметь возможности для асинхронной итерации по блокам (с настроенным размером блока), тщательно обрабатывать ошибки и исключения, и какой-то способ эффективно превратить представления rc 1 в изменяемые версии.
Что-то такое сложное сначала должно появиться в библиотеке, как boost
и пройти итеративные улучшения. И поскольку он довольно многогранен, то, возможно, что-то с достаточным количеством его свойств для ваших целей уже может быть там.
Если вы катите свой собственный, я призываю вас представить его для boost
рассмотрение.
Других решений пока нет …