Задать вопрос
DanielDemidko
@DanielDemidko
Программист

Как передать оператор разыменования в функцию?

Есть контейнер с указателями, его нужно преобразовать в контейнер объектов, т. е. просто разыменовать каждый указатель. Сейчас я делаю это с помощью transform и лямбды.
vector<GameObject> ToVector(
    const set<GameObject*, DereferenceCompare<GameObject, greater>> &cont)
{
    vector<GameObject> res(size(cont));
    transform(cbegin(cont), cend(cont), begin(res), [](GameObject *const p) {
        return *p; 
    });
    return res;
}

Есть ли способ сократить код еще больше, может быть какая нибудь стандартная функция есть, которая проводит разыменование указателя?
  • Вопрос задан
  • 162 просмотра
Подписаться 2 Простой 8 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Короче будет только с библиотекой range (из буста, или range-v3).
К слову, вам надо проверять указатель на null, хотя бы ассертом, если уверены, что там всегда валидные указатели.
Кроме того, вы по сути копируете объекты. Это дорого. Если этого не планировалось, то советую использовать интеллектуальные указатели или reference_wrapper. К тому же, в современном C++ практически нет необходимости использовать сырые указатели.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы