Задать вопрос
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;
}

Есть ли способ сократить код еще больше, может быть какая нибудь стандартная функция есть, которая проводит разыменование указателя?
  • Вопрос задан
  • 161 просмотр
Подписаться 2 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Короче будет только с библиотекой range (из буста, или range-v3).
К слову, вам надо проверять указатель на null, хотя бы ассертом, если уверены, что там всегда валидные указатели.
Кроме того, вы по сути копируете объекты. Это дорого. Если этого не планировалось, то советую использовать интеллектуальные указатели или reference_wrapper. К тому же, в современном C++ практически нет необходимости использовать сырые указатели.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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