Лучшие практики для разоблачения std :: ecector > в C ++ 23C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Лучшие практики для разоблачения std :: ecector > в C ++ 23

Сообщение Anonymous »

Я работаю над классом с членом std::vectorstd::unique_ptr и мне нужен совет о лучших практиках его раскрытия через геттер. Вот мои вопросы:
  • Текущая реализация:
    Это мой метод получения, но он кажется многословным. Есть ли более чистый или более идиоматический способ добиться этого?

    Код: Выделить всё

     public:
    [[nodiscard]] std::ranges::view auto get_drawables() const
    {
    return drawables_ | std::views::transform([](const auto& drawable) { return drawable.get(); });
    }
    
    private:
    std::vector drawables_;
    
  • Право собственности на вектор:
    • Должен ли я хранить элементы по значение, необработанные указатели или интеллектуальные указатели?
    • В настоящее время я использую std::unique_ptr, так как не собираюсь делить владение. Правильный ли это выбор?
  • Выявление переносчика:
    • Я хочу, чтобы вызывающие абоненты:

      перебирали элементы (возможно, более одного раза).
    • изменяли объекты внутри вектора.
  • Я не хотят, чтобы вызывающие абоненты:
    • Изменяли экземпляры std::unique_ptr.
    • Добавляли или удаляли элементы в векторе.
  • Должен ли я действительно предоставлять необработанные указатели, чтобы не подразумевать владение?
  • Могу ли я использовать std ::span каким-то образом, поскольку базовое хранилище действительно является смежным (std::vector)?


Подробнее здесь: https://stackoverflow.com/questions/793 ... trt-in-c23
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»